IT源码网

SQL 外键(FOREIGN KEY) 约束讲解

xmjava 2021年02月13日 大数据 345 0

一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
让我们通过一个例子来解释外键。请看下面两个表:

"Persons" 表:

Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

"Orders" 表:

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1

请注意,"Orders" 中的 "Id_P" 列指向 "Persons" 表中的 "Id_P" 列。
"Persons" 表中的 "Id_P" 列是 "Persons" 表中的 PRIMARY KEY。
"Orders" 表中的 "Id_P" 列是 "Orders" 表中的 FOREIGN KEY。
FOREIGN KEY 约束用于预防破坏表之间连接的动作。
FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
下面的 SQL 在 "Orders" 表创建时为 "Id_P" 列创建 FOREIGN KEY:

CREATE TABLE Orders 
( 
Id_O int NOT NULL, 
OrderNo int NOT NULL, 
Id_P int, 
PRIMARY KEY (Id_O), 
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P) 
)

如果需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束,请使用下面的 SQL 语法:

CREATE TABLE Orders 
( 
Id_O int NOT NULL, 
OrderNo int NOT NULL, 
Id_P int, 
PRIMARY KEY (Id_O), 
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) 
REFERENCES Persons(Id_P) 
)

如果需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束,请使用下面的 SQL 语法:

ALTER TABLE Orders 
ADD CONSTRAINT fk_PerOrders 
FOREIGN KEY (Id_P) 
REFERENCES Persons(Id_P)

撤销 FOREIGN KEY 约束
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders

foreign key只能用于innodb,并且对数据进行操作时,会对外键关联的表进行检索,会影响效率的。所以对外键的使用,要根据个人的实际情况。

发布评论
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

mysql 删匿名帐户讲解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。