MySQL FOREIGN KEY 约束
MySQL FOREIGN KEY 约束
FOREIGN KEY(外键)约束用于预防破坏表之间链接的动作。
FOREIGN KEY是一个表中的字段(或字段集合),它指向另一个表的 PRIMARY KEY(主键)。
具有外键的表称为子表,具有主键的表称为引用表或父表。
看下面两个表:
Persons 表
| PersonID | LastName | FirstName | Age |
|---|---|---|---|
| 1 | Hansen | Ola | 30 |
| 2 | Svendson | Tove | 23 |
| 3 | Pettersen | Kari | 20 |
Orders 表
| OrderID | OrderNumber | PersonID |
|---|---|---|
| 1 | 77895 | 3 |
| 2 | 44678 | 3 |
| 3 | 22456 | 2 |
| 4 | 24562 | 1 |
注意,"Orders" 表中的 "PersonID" 列指向 "Persons" 表中的 "PersonID" 列。
"Persons" 表中的 "PersonID" 列是 "Persons" 表的 PRIMARY KEY。
"Orders" 表中的 "PersonID" 列是 "Orders" 表的FOREIGN KEY。
FOREIGN KEY 约束防止无效数据被插入到外键列中,因为它必须是父表中所包含的值之一。
在 CREATE TABLE 时创建 FOREIGN KEY
以下 SQL 在创建 "Orders" 表时在 "PersonID" 列上创建了一个 FOREIGN KEY:
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)
);
在 ALTER TABLE 时创建 FOREIGN KEY
如果 "Orders" 表已经创建,要在 "PersonID" 列上创建 FOREIGN KEY 约束,请使用以下 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 约束
要删除 FOREIGN KEY 约束,请使用以下 SQL:
ALTER TABLE Orders DROP FOREIGN KEY FK_PersonOrder;