sql - 外键级联多路径多循环有什么问题?

标签 sql foreign-keys cascade rdbms-agnostic

在 SQL Server 2005 中,我刚刚遇到了臭名昭著的错误消息:

Introducing FOREIGN KEY constraint XXX on table YYY may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

现在,StackOverflow 有几个关于此错误消息的主题,所以我已经找到了解决方案(在我的例子中我必须使用触发器),但我很好奇为什么会出现这样的问题.

据我了解,他们基本上要避免两种情况——循环和多路径。循环是两个表彼此具有级联外键的情况。好吧,一个循环也可以跨多个表,不过这是基本情况,会更容易分析。

当 TableA 具有 TableB 和 TableC 的外键,并且 TableB 也具有 TableC 的外键时,就会出现多条路径。再说一遍 - 这是最基本的情况。

我看不到在任何这些表中删除或更新记录时会出现的任何问题。当然,您可能需要多次查询同一个表以查看哪些记录需要更新/删除,但这真的是一个问题吗?这是性能问题吗?

在其他 SO 主题中,人们甚至将使用级联标记为“risky”并声明“resolving cascade paths is a complex problem”。为什么?风险在哪里?问题出在哪里?

最佳答案

您有一个子表,该子表具有来自同一父级的 2 个级联路径:一个“删除”,一个“空”。

什么优先?之后你期待什么?等等

注意:触发器是代码,可以向级联添加一些智能或条件。

关于sql - 外键级联多路径多循环有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1637708/

相关文章:

CSS/ Jade /HTML : boxes won't inline properly

mysql - 显示表和 MYSQL_NUM_ROWS

Mysql查询动态统计某行出现次数并将其转换为列

php - 错误 1005 (HY000) : Can't create table 'db.POSTS' (errno: 150)

MySQL "set unique_checks"、 "set foreign_key_checks"与 "alter table disable keys"

mysql - 数据库:如何创建更新级联表并查询数据?

java - 删除实体时违反约束

mysql - 如何将向量插入到 mysql 表的列中?

mysql - 非重复计数查询

mysql - mySQL 中的外键有什么问题?