MySQLの外部キー制約
MySQLの外部キー制約
制約は、FOREIGN KEY
テーブル間のリンクを破壊するアクションを防ぐために使用されます。
AFOREIGN KEY
は、あるテーブルのフィールド(またはフィールドのコレクション)でありPRIMARY KEY
、別のテーブルのを参照します。
外部キーを持つテーブルは子テーブルと呼ばれ、主キーを持つテーブルは参照テーブルまたは親テーブルと呼ばれます。
次の2つの表を見てください。
人の表
PersonID | LastName | FirstName | Age |
---|---|---|---|
1 | Hansen | Ola | 30 |
2 | Svendson | Tove | 23 |
3 | Pettersen | Kari | 20 |
注文表
OrderID | OrderNumber | PersonID |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 2 |
4 | 24562 | 1 |
「Orders」テーブルの「PersonID」列が「Persons」テーブルの「PersonID」列を指していることに注意してください。
「Persons」テーブルの「PersonID」列は、「PRIMARY KEY
Persons」テーブルのです。
「Orders」テーブルの「PersonID」列は
FOREIGN KEY
「Orders」テーブルのです。
FOREIGN KEY
制約は、無効なデータが親テーブルに含まれる値の1つである必要があるため、外部キー列に挿入されるのを防ぎます。
CREATETABLEの外部キー
次のSQLはFOREIGN KEY
、「Orders」テーブルが作成されるときに「PersonID」列にを作成します。
CREATE TABLE Orders
(
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
制約の命名を許可し、複数の列に制約FOREIGN KEY
を定義する
FOREIGN KEY
には、次のSQL構文を使用します。
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)
);
ALTERTABLEの外部キー
FOREIGN KEY
「Orders」テーブルがすでに作成されているときに「PersonID」列に制約を作成するには、次のSQLを使用します。
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID);
制約の命名を許可し、複数の列に制約FOREIGN KEY
を定義する
FOREIGN KEY
には、次のSQL構文を使用します。
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID);
外部キー制約を削除する
制約を削除するFOREIGN KEY
には、次のSQLを使用します。
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;