SQL FOREIGN KEY 制約

SQL FOREIGN KEY 制約

一つのテーブルのFOREIGN KEYは、別のテーブルのPRIMARY KEYを指しています。

外键を説明するために例を示しましょう。以下の二つのテーブルを見てください:

"Persons"テーブル:

Id_P LastName FirstName 住所
1 アダムズ ジョン オックスフォード・ストリート ロンドン
2 ブッシュ ジョージ ファイブ・アベニュー ニューヨーク
3 カーター トーマス 長安街 北京

"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"テーブルのPRIMARY KEYです。

"Orders"テーブルの"Id_P"カラムは、"Orders"テーブルのFOREIGN KEYです。

FOREIGN KEY制約は、テーブル間の接続を破壊する動作を予防するために使用されます。

FOREIGN KEY制約は、それが参照するテーブルの値の一部である必要があるため、外键カラムに非法データを挿入するのを防ぐこともできます。

CREATE TABLEでのSQL FOREIGN KEY制約

以下のSQLは、"Orders"テーブルが作成される際に"Id_P"カラムにFOREIGN KEYを作成するためのものです:

MySQL:

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)
)

SQL Server / Oracle / MS Access:

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 文法を使用してください:

MySQL / SQL Server / Oracle / MS Access:

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)
)

ALTER TABLE 上の SQL FOREIGN KEY Constraint

「Orders」テーブルに「Id_P」列の FOREIGN KEY 約束が既存している場合、以下の SQL を使用して FOREIGN KEY 約束を作成してください:

MySQL / SQL Server / Oracle / MS Access:

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

FOREIGN KEY 約束に名前を付けたり、複数の列に対して FOREIGN KEY 約束を定義する必要がある場合は、以下の SQL 文法を使用してください:

MySQL / SQL Server / Oracle / MS Access:

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

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