SQL FOREIGN KEY制約
SQL FOREIGN KEY 制約
あるテーブルの FOREIGN KEY は、別のテーブルの UNIQUE KEY(一意制約のキー)を指します。
例を使って外部キーを説明しましょう。次の2つのテーブルを見てください:
"Persons" テーブル:
| P_Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 1 | Hansen | Ola | Timoteivn 10 | Sandnes |
| 2 | Svendson | Tove | Borgvn 23 | Sandnes |
| 3 | Pettersen | Kari | Storgt 20 | Stavanger |
"Orders" テーブル:
| O_Id | OrderNo | P_Id |
|---|---|---|
| 1 | 77895 | 3 |
| 2 | 44678 | 3 |
| 3 | 22456 | 2 |
| 4 | 24562 | 1 |
"Orders" テーブルの "P_Id" 列は "Persons" テーブルの "P_Id" 列を指していることに注意してください。
"Persons" テーブルの "P_Id" 列は、"Persons" テーブルの PRIMARY KEY です。
"Orders" テーブルの "P_Id" 列は、"Orders" テーブルの FOREIGN KEY です。
FOREIGN KEY 制約は、テーブル間の接続を壊す行為を防ぐために使用されます。
FOREIGN KEY 制約は、外部キー列への不正なデータの挿入も防ぎます。外部キー列は、それが指すテーブルの値のいずれかでなければならないためです。
CREATE TABLE 時の SQL FOREIGN KEY 制約
次の SQL は、"Orders" テーブルの作成時に "P_Id" 列に FOREIGN KEY 制約を作成します:
MySQL:
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)
SQL Server / Oracle / MS Access:
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)
FOREIGN KEY 制約に名前を付け、複数の列に対する FOREIGN KEY 制約を定義する場合は、次の SQL 構文を使用します:
MySQL / SQL Server / Oracle / MS Access:
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)
ALTER TABLE 時の SQL FOREIGN KEY 制約
"Orders" テーブルが作成済みの場合、"P_Id" 列に FOREIGN KEY 制約を作成するには、次の SQL を使用します:
MySQL / SQL Server / Oracle / MS Access:
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
FOREIGN KEY 制約に名前を付け、複数の列に対する FOREIGN KEY 制約を定義する場合は、次の SQL 構文を使用します:
MySQL / SQL Server / Oracle / MS Access:
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
FOREIGN KEY 制約の削除
FOREIGN KEY 制約を削除するには、次の SQL を使用します:
MySQL:
DROP FOREIGN KEY fk_PerOrders
SQL Server / Oracle / MS Access:
DROP CONSTRAINT fk_PerOrders
その他の拡張