SQL FOREIGN KEY 制約

❮ 前章へ 次章へ ❯

SQL FOREIGN KEY 制約

或るテーブルの FOREIGN KEY キーは、別テーブルの PRIMARY KEY をポイント指します。

例を用いて外部キー(foreign key)を説明しましょう。次の 2 つのテーブルを見てください:

"Persons" table:

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" table:

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

❮ 前章へ 次章へ ❯