1. FOREIGN KEY约束

一个表中的FOREIGN KEY指向另一个表中的UNIQUE KEY(唯一约束的键)。

比如我之前做过的小项目——购物车中的订单项表和订单表,订单项表中的oid就与订单表中的id相对应,应该设置为外键约束(😂当时我还没设置)。外键约束用于预防破坏表之间连接的行为;同时也能预防非法数据插入外键列,因为它必须是指向的那个表的值之一(例如如果没有订单5,就不能在订单项表中插入oid为5的订单项数据。)

注意:这里Order表的id不可以是自增的(AUTO_INCREMENT)!

由于Order在MySQL中是关键字,小伙伴们自己试的时候可以把表名取为order_,防止报错。

OrderItem表中的oid就是OrderItem表的FOREIGN KEY,指向Order表。

2. 创建表时添加外键约束

创建OrderItem表添加外键约束pid

1
2
3
4
5
6
7
8
CREATE TABLE OrderItem (
id INT AUTO_INCREMENT,
pid INT,
oid INT,
num INT,
PRIMARY KEY (id),
FOREIGN KEY (oid) REFERENCES Order (id)
);

3. ALTER TABLE创建外键约束

当OrderItem表已经创建,需要为它添加pid外键约束

1
2
3
ALTER TABLE OrderItems
ADD FOREIGN KEY (pid)
REFERENCES Order (id);

如果需要定义多个列的外键约束,则使用下面语法

1
2
3
4
ALTER TABLE OrderItems
ADD CONSTRAINT fk_Order2OrderItems
FOREIGN KEY (pid)
REFERENCES Order (id);

4. 删除外键约束

在不删除外键约束的情况下,直接删除父表(这里就是Order)会报错。

删除fk_Order2OrderItems

1
2
ALTER TABLE OrderItems
DROP FOREIGN KEY fk_Order2OrderItems;

5. 几个知识点

  • 谁添加外键谁就是子表,关联的谁就是父表。
  • 不一定非要使用外键,根据业务实际考虑(外键的使用占用资源,影响性能。)

6. 参考