SQL FOREIGN KEY 约束
SQL FOREIGN KEY 约束
FOREIGN KEY 约束在两个表之间建立链接,并防止破坏它们之间链接的操作。
FOREIGN KEY 是表中引用另一个表 PRIMARY KEY 的列。
包含外键列的表称为子表,包含主键列的表称为被引用表或父表。
FOREIGN KEY 约束防止将无效数据插入外键列(在子表中),因为该值必须存在于父表中。
FOREIGN KEY 约束还会阻止您删除父表中的记录,如果子表中仍存在相关行的话。
假设我们有两个表:
Persons 表
| PersonID | LastName | FirstName | Age |
|---|---|---|---|
| 1 | Hansen | Ola | 30 |
| 2 | Svendson | Tove | 23 |
Orders 表
| OrderID | OrderNumber | PersonID |
|---|---|---|
| 3 | 22456 | 2 |
| 4 | 24562 | 1 |
这里我们看到 "Orders" 表中的 "PersonID" 列指向 "Persons" 表中的 "PersonID" 列。
"Persons" 表中的 "PersonID" 列是 "Persons" 表中的 PRIMARY KEY。
"Orders" 表中的 "PersonID" 列是 "Orders" 表中的 FOREIGN KEY。
CREATE TABLE 上的 FOREIGN KEY
以下 SQL 语句在创建 Orders 表时在 PersonID 列上创建了 FOREIGN KEY 约束:
CREATE TABLE Orders (
OrderID int PRIMARY KEY,
OrderNumber int NOT NULL,
PersonID int,
CONSTRAINT fk_Person
FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID)
);
ALTER TABLE 上的 FOREIGN KEY
要在 Orders 表创建后,在 PersonID 列上创建 FOREIGN KEY 约束,请使用以下 SQL:
ALTER TABLE Orders ADD CONSTRAINT fk_Person FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
删除 FOREIGN KEY 约束
要删除 FOREIGN KEY 约束,请使用以下 SQL:
SQL Server / Oracle / MS Access:
ALTER TABLE Orders DROP CONSTRAINT fk_Person;
MySQL:
ALTER TABLE Orders DROP FOREIGN KEY fk_Person;