我想知道何时实际使用删除级联或删除限制以及更新级联或更新限制。我很困惑使用它们或在我的数据库中应用。
2 回答
在外键约束上使用级联运算符是一个热门话题。
理论上,如果您知道删除父对象将自动也意味着删除其所有子对象,那么在子表和父表之间的链接上级联删除可能是有意义的。
想象一个由“零件”组成的“机器”。如果您的逻辑表明如果删除了机器,那么构成该机器的所有部件也将从数据库中清除,那么您可以在部件表和机器表之间的外键链接上使用级联删除选项。
但是:这可能有点棘手,特别是如果您最终拥有与此选项链接的整个表链。因此,很多开发人员倾向于在自己的数据访问代码中处理这个问题,而不是在数据库中定义它。
当父表上的主键发生更改时,通常使用更新级联 - 以便更新所有相关的子表和行以反映该更改。这通常被认为是数据库代码异味——这里更好的选择是确保主键永远不会改变,这样就永远不需要这种级联更新——例如,通过在没有业务的表中引入人工“代理”键列-相关的含义,因此永远不会更新。
这些帮助有用?有什么具体细节你还不清楚吗?
我的看法是:虽然这在理论上是一个好主意,但大多数开发人员并没有真正在“现实生活”中使用它——大多数开发人员会选择在数据访问代码中处理这个问题,这使他们能够完全而明确地控制所获得的内容删除(或更新)。
以及 marc_s 所说的..
我发现 CASCADE 选项有时可以在不需要时对子表生成“虚拟”更新,从而延长事务、使用更多锁、使用更多资源等。