首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于[delete (cascade/restrict)]和Update (cascade/restrict)

关于[delete (cascade/restrict)]和Update (cascade/restrict)
EN

Stack Overflow用户
提问于 2010-09-26 22:48:55
回答 2查看 702关注 0票数 1

我想知道什么时候实际使用delete cascade或delete restrict和update cascade或update restrict。在我的数据库中使用它们或应用程序时,我非常困惑。

EN

回答 2

Stack Overflow用户

发布于 2010-09-26 23:03:18

在外键约束上使用级联运算符是一个热门话题。

从理论上讲,如果您知道删除父对象也将自动删除其所有子对象,那么在子表和父表之间的链接上进行级联删除可能是有意义的。

想象一台由“部件”组成的“机器”。如果您的逻辑表明,如果删除机器,则构成该机器的所有部件也将从数据库中清除,那么您可以在部件表和机器表之间的外键链接上使用级联删除选项。

但是:这可能有点棘手,特别是当您最终拥有与此选项链接的整个表链时。因此,许多开发人员倾向于在自己的数据访问代码中处理这一问题,而不是在数据库中定义它。

更新级联通常在父表上的主键更改时使用-以便更新所有相关的子表和行以反映该更改。这通常被认为是数据库代码的味道-这里更好的选择是确保主键永远不会改变,这样就永远不需要级联更新-例如,通过在表中引入一个人工的“代理”键列,它没有与业务相关的含义,因此永远不会更新。

这真的有帮助吗?有什么特别的细节你还不清楚吗?

我的观点是:虽然这在理论上是一个很好的想法,但大多数开发人员并不真正在“真实生活”中使用它-大多数开发人员将选择在数据访问代码中处理这一问题,这使他们能够完全而明确地控制要删除(或更新)的内容。

票数 3
EN

Stack Overflow用户

发布于 2010-09-26 23:36:10

以及marc_s所说的..

我发现,当不需要时,级联选项有时会对子表生成“虚拟”更新,从而延长事务、使用更多锁、使用更多资源等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3798288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档