mysql主键级联,mysql – 使用带有复合主键的级联

我的问题是我可以使用带有复合主键的级联吗?

我有一个表FbUser和一个表FbFriends. FbFriends表具有UID和FID作为复合主键,在其他表中它表示为外键(UID,FID)

如果我从FbFriends中删除UID =“10”和FID =“2”CASCADE的语句,是否也会删除子行?

解决方法:

ON DELETE CASCADE是外键的属性.它不是您添加到DELETE语句的子句.如果定义外键在删除父项时删除子行,则无论外键是在单个列上还是在多个列上定义,删除都将级联.

但就个人而言,我并不是级联删除或任何其他“魔法”的忠实粉丝,这些“魔法”发生在一段代码中的逻辑之外.我已经看到太多的情况,其中ORM配置错误,执行DELETE后跟INSERT而不是UPDATE,或者开发人员构建脚本,删除并重新加载表中的某些行,无意中造成混乱时级联外键或未查看的触发器导致对某些其他表的修改.如果原始开发人员没有意识到这些表可能会受到他的更改的影响,他肯定无法测试这些表中的数据,并且在用户开始看到问题和哭泣之前,更改可以很容易地升级到生产.当然,在父表之前显式删除子表更加冗长.但这样做通常会使某人更有可能完整地阅读和遵循您的代码.

例如,在Oracle领域,Tom Kyte是against cascade deletes.您还可以找到cascading constraints caused unexpected behavior的各种情况,因为维护系统的开发人员不记得很久以前有人以特定方式配置了约束.就个人而言,我宁愿得到一个错误,告诉我数据库不能删除一行,因为有子行而不是可能丢失我不打算丢失的数据.

标签:sql,sql-server,mysql,oracle

来源: https://codeday.me/bug/20190728/1566082.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值