SQL FOREIGN KEY: SQL Server での作成方法と例
外部キーとは何ですか?
A 外部キー SQL Server 内で参照整合性を強制する方法を提供します。 簡単に言うと、外部キーは、あるテーブルの値が別のテーブルに必ず存在することを保証します。
FOREIGN KEY の規則
- SQL 外部キーでは NULL を使用できます。
- 参照されるテーブルは親テーブルと呼ばれます
- SQLでは外部キーを持つテーブルを子テーブルと呼びます。
- 子テーブルの SQL 外部キーは、親テーブルの主キーを参照します。
- この親子関係は「参照関係」と呼ばれるルールを強制します。 Integrityに設立された地域オフィスに加えて、さらにローカルカスタマーサポートを提供できるようになります。」
以下のSQLの外部キーの例は、図とともに、FOREIGN KEYに関する上記のすべてのポイントをまとめたものです。

SQLでFOREIGN KEYを作成する方法
を作成できます 外部キー SQLサーバーで 2通りの方法:
- SQL Server Management Studio
- T-SQL
SQL Server Management Studio
親テーブル: たとえば、「Course」として既存の親テーブルがあるとします。 Course_ID と Course_name は、Course_Id を主キーとする XNUMX つの列です。
子テーブル: XNUMX 番目のテーブルを子テーブルとして作成する必要があります。 「Course_ID」と「Course_Strength」の XNUMX つの列。 ただし、「Course_ID」は外部キーとなります。
ステップ1) 「テーブル」を右クリック>「新規」>「テーブル…」
ステップ2) XNUMX つの列名を「Course_ID」と「Course_Strength」として入力します。 「Course_Id」列を右クリックします。 次に、「関係」をクリックします。
ステップ3) In '外部キー関係、' クリック '追加'
ステップ4) 「テーブルと列の仕様」で、をクリックします。 「…」アイコン
ステップ5) 「COURSE」として「Primary Key Table」を選択し、ドロップダウンから「Foreign Key Table」として作成中の新しいテーブルを選択します。
ステップ6) 「主キー テーブル」 – 「主キー テーブル」列として「Course_Id」列を選択します。
「外部キー テーブル」 - 「外部キー テーブル」列として「Course_Id」列を選択します。 「OK」をクリックします。
ステップ7) ソフトウェアの制限をクリック Add(追加する)
ステップ8) テーブル名に「Course_Strength」を指定し、クリックします。 [OK]
結果: の間に親子関係を設定しました。 'コース' や 「コース_強度」。
T-SQL: T-SQL を使用して親子テーブルを作成する
親テーブル: もう一度考えてみましょう。「Course」というテーブル名を持つ既存の親テーブルがあります。
Course_ID と Course_name は、Course_Id を主キーとする XNUMX つの列です。
子テーブル: XNUMX 番目のテーブルを子テーブルとして「Course_Strength_TSQL」という名前で作成する必要があります。
子テーブル Course_Strength_TSQL の XNUMX つの列としての「Course_ID」と「Course_Strength」。 ただし、「Course_ID」は外部キーとなります。
以下は、FOREIGN KEY を使用してテーブルを作成する構文です。
構文:
CREATE TABLE childTable ( column_1 datatype [ NULL |NOT NULL ], column_2 datatype [ NULL |NOT NULL ], ... CONSTRAINT fkey_name FOREIGN KEY (child_column1, child_column2, ... child_column_n) REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n) [ ON DELETE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] [ ON UPDATE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] );
上記のパラメータの説明は次のとおりです。
- childTable は、作成されるテーブルの名前です。
- column_1、column_2 - テーブルに追加される列。
- fkey_name - 作成する外部キー制約の名前。
- child_column1、child_column2…child_column_n -parentTable の主キーを参照する chidTable 列の名前。
- parentTable - 子テーブルでキーが参照される親テーブルの名前。
- parent_column1、parent_column2、…parent_column3 - 親テーブルの主キーを構成する列。
- 削除時。 オプションのパラメータ。 親データの削除後に子データがどうなるかを指定します。 このパラメータの値には、NO ACTION、SET NULL、CASCADE、または SET DEFAULT などがあります。
- ON UPDATE - オプションのパラメータ。 親データの更新後に子データに何が起こるかを指定します。 このパラメータの値には、NO ACTION、SET NULL、CASCADE、または SET DEFAULT などがあります。
- NO ACTION - ON DELETE および ON UPDATE と一緒に使用されます。 これは、親データの更新または削除後に子データには何も起こらないことを意味します。
- CASCADE - ON DELETE および ON UPDATE と一緒に使用されます。 親データが削除または更新された後に、子データが削除または更新されます。
- SET NULL - ON DELETE および ON UPDATE と一緒に使用されます。 親データが更新または削除された後、子は null に設定されます。
- SET DEFAULT - ON DELETE および ON UPDATE と一緒に使用されます。 親データを更新または削除すると、子データはデフォルト値に設定されます。
SQL の外部キーの例を見て、外部キーとして XNUMX つの列を持つテーブルを作成してみましょう。
SQL の外部キーの例
クエリ:
CREATE TABLE Course_Strength_TSQL ( Course_ID Int, Course_Strength Varchar(20) CONSTRAINT FK FOREIGN KEY (Course_ID) REFERENCES COURSE (Course_ID) )
ステップ1) 「実行」をクリックしてクエリを実行します。
結果: の間に親子関係を設定しました。 'コース' や 「コース_強度_TSQL」。
ALTER TABLE の使用
次に、SQL で外部キーを使用する方法と、ALTER TABLE ステートメントを使用して SQL サーバーに外部キーを追加する方法を学びます。以下の構文を使用します。
ALTER TABLE childTable ADD CONSTRAINT fkey_name FOREIGN KEY (child_column1, child_column2, ... child_column_n) REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n);
上記で使用したパラメータの説明は次のとおりです。
- childTable は、作成されるテーブルの名前です。
- column_1、column_2 - テーブルに追加される列。
- fkey_name - 作成する外部キー制約の名前。
- child_column1、child_column2…child_column_n -parentTable の主キーを参照する chidTable 列の名前。
- parentTable - 子テーブルでキーが参照される親テーブルの名前。
- parent_column1、parent_column2、…parent_column3 - 親テーブルの主キーを構成する列。
テーブルを変更して外部キーを追加する例:
ALTER TABLE department ADD CONSTRAINT fkey_student_admission FOREIGN KEY (admission) REFERENCES students (admission);
fkey_student_admission という名前の外部キーを部門テーブルに作成しました。 この外部キーは、students テーブルの入学列を参照します。
クエリの例 FOREIGN KEY
まず、親テーブルのデータ、COURSE を見てみましょう。
クエリ:
SELECT * from COURSE;
次に、子テーブルに行を挿入しましょう。 「コース_強度_TSQL」。
XNUMX 種類の行を挿入してみます
- 最初のタイプでは、子テーブルの Course_Id が親テーブルの Course_Id に存在します。 つまり、Course_Id = 1 および 2
- 5 番目のタイプは、子テーブルの Course_Id が親テーブルの Course_Id に存在しません。 つまり、Course_Id = XNUMX
クエリ:
Insert into COURSE_STRENGTH values (1,'SQL'); Insert into COURSE_STRENGTH values (2,'Python'); Insert into COURSE_STRENGTH values (5,'PERL');
結果: 一緒にクエリを実行して、親テーブルと子テーブルを確認しましょう。
Course_strength テーブルには、Course_ID 1 と 2 の行が存在します。 一方、Course_ID 5 は例外です。
製品概要
- 外部キーのすべての値は、次の一部である必要があります。 主キー 他のテーブルの。
- 当学校区の MySQL 外部キーは、同じテーブル内の別の列を参照できます。この参照は自己参照として知られています。
- SQL 外部キー制約 : テーブル間のリンクと、外部キー列に挿入される無効なデータを保護するために使用されます。
- 外部キーは、Create Table、Alter Table、または SQL Server Management Studio.
- 主キーと外部キーの違いは次のとおりです。 ここをクリック