MySQL 外键

一个表中的字段,被另一个表引用。 主表 的值给 从表 引用。

从表添加值,必须在主表中找到相应的存在。创建时先创建主表,删表时先删从表。

主表被引用的必须保证唯一,添加唯一约束或主键约束

阿里禁用外键

在阿里开发规范当中是禁用外键的,一切外键的概念都必须在应用层解决。

外键不好的地方:

每次做DELETE或者UPDATE都必须考虑外键约束,会导致开发时更困难,测试数据极为不方便

外键的优点:

保证数据的完整性和一致性,级联操作方便,数据一致性交给数据库,代码量小

使用外键后会产生的问题:

性能问题,额外的数据一致性校验查询。

并发问题,外键约束会启用行级锁,主表写入时会进入阻塞。

级联删除问题,多层级联删除会上数据变得不可控,触发器也严格被禁用。

数据耦合,数据库层面数据关系产生耦合,数据迁移维护困难

阿里开发规范解读:为啥禁用外键约束? - Bilibili