为啥禁用外键约束

为啥禁用外键约束,第1张

【阿里JAVA规范】 :不得使用外键与级联,一切外键概念必须在应用层解决

阿里巴巴为什么这么规定?

1.每次做DELETE 或者UPDATE都必须考虑外键约束,会导致开发的时候很痛苦,测试数据极为不方便,也就是说插入一条主记录的时候,这个时候主记录对应的外键,也必须删除或者更新,再比如一个测试员在做压力测试入库1000W数据,那么同时对应的外键记录表也要入库1000W,也就需要造2000W数据,增加工作量

2.性能问题:对于包含主键表的记录,需要入库2张表

3.并发问题:外键约束会启用行级锁 主表写入时会进入阻塞,比如订单明细表和订单总额表存在外键,当增加订单明细表的时候,但是订单总额表写 *** 作没有完成就会导致明细表发生阻塞,线程一直积压导致mysql崩溃。

4.级联删除问题:多层级联删除会让数据变得不可控 ;触发器也严格被禁用

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

 

 6.如果mysql的数据达到100亿以上,此时需要数据迁移,比如迁移到hbase,由于hbase没有主外键的关系,程序中并没有主外键关系的检查,就不能保证迁移过程中保证数据一致性

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/720487.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存