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:

CREATE TABLE Orders
(
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:

CREATE TABLE Orders
(
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:

CREATE TABLE Orders
(
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:

ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

FOREIGN KEY 制約に名前を付け、複数の列に対する FOREIGN KEY 制約を定義する場合は、次の SQL 構文を使用します:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)


FOREIGN KEY 制約の削除

FOREIGN KEY 制約を削除するには、次の SQL を使用します:

MySQL:

ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders

SQL Server / Oracle / MS Access:

ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders

その他の拡張