SQL Foreign Key
SQL FOREIGN KEY 约束
FOREIGN KEY 外键是用于将两个表链接在一起的键。
FOREIGN 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" 表中的主键。
"Orders" 表中的 "PersonID" 列是 "Orders" 表中的外键。
FOREIGN KEY 外键约束用于防止破坏表之间链接的操作。
FOREIGN KEY 外键约束还防止将无效数据插入外键列,因为它必须是它所指向的表中包含的值之一。
Advertisement -->
创建表时的 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)
);
修改表时的 FOREIGN KEY 约束
如果在表已存在的情况下为 "PersonID" 列创建 FOREIGN KEY 约束,请使用下面的 SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE OrdersADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
如果需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE OrdersADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
撤销 FOREIGN KEY 约束
如需撤销 FOREIGN KEY 约束,请使用下面的 SQL:
MySQL:
ALTER TABLE OrdersDROP FOREIGN KEY FK_PersonOrder;
SQL Server / Oracle / MS Access:
ALTER TABLE OrdersDROP CONSTRAINT FK_PersonOrder;