【IT老齐012】外键约束
【IT老齐012】外键约束
优点
- 保证数据的完整性和一致性
- 级联操作方便
- 数据一致性交给数据库,代码量小
缺点
- 性能问题
- 额外的数据一致性校验查询
- 并发问题
- 外键约束会启用行级锁主表写入时会进入阻塞
- 级联删除问题
- 多层级联删除会让数据变得不可控
- 数据耦合问题
- 数据库层面数据关系产生耦合,数据迁移维护困难
场景
- 性能问题
- 往订单明细表添加一条数据,会强制查询对应订单表中的订单id是否存在。
- 并发问题
- 并发环境下,往订单明细表添加一条数据,会强制查询对应订单表中的订单id是否存在,所以订单表开启共享锁(共享锁【S锁】,又称为读锁,可以查看但无法修改和删除的一种数据锁)。
- 某种情况下对订单id进行更新操作,这时订单表该数据开启排它锁(排他锁【X锁】,又称写锁)。
- 若订单表写锁不被释放,订单明细表处于阻塞的状态。会造成线程积压,系统崩溃。
- 级联删除问题
- 删除一条订单类型数据,导致删除的订单明细无法追溯
- 数据耦合问题
- 订单明细表数据增长,数据量10亿后,需要迁移到Hbase。这时数据不在同一个库,没有了主外键约束,代码上无校验,就会产生属于一致性问题。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性