数据库必知词汇:外键约束(FOREIGN KEY)

外键是一个表的字段,不是本表的主键,但对应另一个表的主键。外键主要用来在两个表的数据之间建立连接,可以是一列或者多列。一个表可以有一个或者多个外键。

外键对应的是参照完整性,一个表的外键可以为空值,若不为空,则外键的值必须等于另一个表中的主键的某个值。

让我们通过一个实例来解释外键。请看下面两个表:
"Persons" 表:

P_Id FirstName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

"Orders" 表:

O_Id OrderNo P_Id
1 77895 3
2 44678 3
3 22456 2
4 24562 1

请注意,"Orders" 表中的 "P_Id" 列指向 "Persons" 表中的 "P_Id" 列。"Persons" 表中的 "P_Id" 列是 "Persons" 表中的 主键(PRIMARY KEY)。"Orders" 表中的 "P_Id" 列是 "Orders" 表中的 外键约束(FOREIGN KEY)。

外键约束(FOREIGN KEY) 主要作用是保持数据的一致性、完整性。例如:”Orders”表中的字段”P_Id”值必须对应“Persons”表中字段”P_Id”的某一个值。

(1) CREATE TABLE 时的 SQL FOREIGN KEY 约束
下面的 SQL 在 "Orders" 表创建时在 "P_Id" 列上创建 FOREIGN KEY 约束:
MySQL:
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)

SQL Server / Oracle:
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)

如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法:
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)

(2) ALTER TABLE 时的 SQL FOREIGN KEY 约束
当 "Orders" 表已被创建时,如需在 "P_Id" 列创建 FOREIGN KEY 约束,请使用下面的 SQL:
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法:
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

(3) 撤销 FOREIGN KEY 约束
如需撤销 FOREIGN KEY 约束,请使用下面的 SQL:
MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders

SQL Server / Oracle:
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders

资料来源:
SQL 约束(Constraints) https://www.runoob.com/sql/sql-constraints.html
SQL FOREIGN KEY 约束 https://www.runoob.com/sql/sql-foreignkey.html

上一篇:【云吞铺子】CDN域名接入流程


下一篇:【云吞铺子】OSS上云数据迁移