SQL FOREIGN KEY制約
SQL FOREIGN KEY制約
FOREIGN KEY制約は、テーブル間のリンクを破壊するアクションを防ぐために使用されます。
FOREIGN KEYは、あるテーブルのフィールド(またはフィールドの集まり)で、別のテーブルのPRIMARY KEYを参照します。
外部キーを持つテーブルは子テーブルと呼ばれ、主キーを持つテーブルは参照テーブルまたは親テーブルと呼ばれます。
次の2つの表を見てください。
人物表
|
個人ID |
苗字 |
名前 |
年 |
|---|---|---|---|
| 1 | ハンセン | オラ | 30 |
| 2 | スヴェンソン | トーベ | 23 |
| 3 | ペッターセン | カリ | 20 |
注文表
|
オーダーID |
注文番号 |
個人ID |
|---|---|---|
| 1 | 77895 | 3 |
| 2 | 44678 | 3 |
| 3 | 22456 | 2 |
| 4 | 24562 | 1 |
「Orders」テーブルの「PersonID」列が「Persons」テーブルの「PersonID」列を指していることに注意してください。
"Persons"テーブルの"PersonID"列は、「Person」テーブルのPRIMARY KEYです。
"Orders"テーブルの"PersonID"列は、「Order」テーブルのFOREIGN KEYです。
FOREIGN KEY制約は親テーブルに含まれる値の1つでなければならないため、外部キー列に無効なデータが挿入されるのを防ぎます。
CREATE TABLEのSQL FOREIGN KEY
次のSQLは"Orders"テーブルが作成されたとき"PersonID"列にFOREIGN KEYを作成します。
MySQL:
CREATE TABLE Orders(
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
SQL Server/Oracle/MS Access:
CREATE TABLE Orders(
OrderID int NOT NULL PRIMARY KEY,
OrderNumber int NOT NULL,
PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);
FOREIGN KEY制約に名前を付け、複数の列にFOREIGN KEY制約を定義するには、以下のSQL構文を使用します。
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Orders(
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID)
);
ALTER TABLEのSQL FOREIGN KEY
"Orders"テーブルが既に作成されている場合に"PersonID"列にFOREIGN KEY制約を適用するには、次のSQLを使用します。
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID)REFERENCES Persons(PersonID);
FOREIGN KEY制約に名前を付け、複数の列にFOREIGN KEY制約を定義するには、以下のSQL構文を使用します。
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID)REFERENCES Persons(PersonID);
FOREIGN KEY制約を削除する
FOREIGN KEY制約を削除するには次のSQLを使用します。
MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;
SQL Server/Oracle/MS Access:
ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;