SQL FOREIGN KEY 约束
SQL 外键约束
The FOREIGN KEY
constraint 用于防止破坏表之间链接的操作。
A 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
。
The FOREIGN KEY
constraint 阻止将无效数据插入外键列,因为它必须是父表中包含的值之一。
在 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
要创建 FOREIGN KEY
约束在“PersonID” 列上时,“Orders” 表已创建,请使用以下 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;