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