あるテーブルの FOREIGN KEY は、別のテーブルの PRIMARY KEY を指します。
外部キーを例を挙げて説明しましょう。 次の 2 つの表を参照してください。
"Per@sons" :
| Id_P | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 1 | Adams | John | Oxford Street | London |
| 2 | Bush | George | Fifth Avenue | New York |
| 3 | Carter | Thomas | Changan Street | Beijing |
"Orders" :
| Id_O | OrderNo | Id_P |
|---|---|---|
| 1 | 77895 | 3 |
| 2 | 44678 | 3 |
| 3 | 22456 | 1 |
| 4 | 24562 | 1 |
「Orders」の「Id_P」列は、「persons」テーブルの「Id_P」列を指していることに注意してください。
「persons」テーブルの「Id_P」列は、「persons」テーブルの主キーです。
「Orders」テーブルの「Id_P」列は、「Orders」テーブルの FOREIGN KEY です。
FOREIGN KEY 制約は、テーブル間の接続を切断するアクションを防ぐために使用されます。
FOREIGN KEY 制約は、外部キー列に不正なデータが挿入されることも防ぎます。これは、外部キー列が指すテーブル内の値の 1 つである必要があるためです。
次の SQL は、「Orders」テーブルの作成時に「Id_P」列の FOREIGN KEY を作成します。
CREATE TABLE Orders ( Id_O int NOT NULL, OrderNo int NOT NULL, Id_P int, PRIMARY KEY (Id_O), FOREIGN KEY (Id_P) REFERENCES Persons(Id_P) )
CREATE TABLE Orders ( Id_O int NOT NULL PRIMARY KEY, OrderNo int NOT NULL, Id_P int FOREIGN KEY REFERENCES Persons(Id_P) )
FOREIGN KEY 制約に名前を付け、複数の列に FOREIGN KEY 制約を定義する必要がある場合は、次の SQL 構文を使用します。
CREATE TABLE Orders ( Id_O int NOT NULL, OrderNo int NOT NULL, Id_P int, PRIMARY KEY (Id_O), CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) REFERENCES Persons(Id_P) )
「Orders」テーブルがすでに存在する場合に「Id_P」列に FOREIGN KEY 制約を作成するには、次の SQL を使用します。
ALTER TABLE Orders ADD FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
FOREIGN KEY 制約に名前を付け、複数の列に FOREIGN KEY 制約を定義する必要がある場合は、次の SQL 構文を使用します。
ALTER TABLE Orders ADD CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
FOREIGN KEY 制約を削除するには、次の SQL を使用します。
ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders
ALTER TABLE Orders DROP CONSTRAINT fk_PerOrders