我只是阅读更新级联,我想知道这是否仅适用于非规范化表,状态和类型字段?似乎规范化将消除对此的需要,但我只是想确认或了解更新级联的其他有用原因。 THX!
答案 0 :(得分:5)
规范化表对于强制它们之间的外键关系是必要且有用的。更改PK字段的值有点罕见,特别是如果它是auto_increment
,但是当它发生时,更改会在规范化的FK关系中向下级联。
同样,ON UPDATE DELETE
对于通过所有1:1
FK关系级联行删除非常有用,因此无需从应用程序代码执行多次删除操作。无论如何,这样做很容易出错。
请考虑以下事项:
table customers:
custid INT NOT NULL PRIMARY KEY,
custname VARCHAR(64) NOT NULL
table orders:
orderid INT NOT NULL PRIMARY KEY,
custid INT NOT NULL,
FOREIGN KEY (custid) REFERENCES customers (custid) ON UPDATE CASCADE ON DELETE CASCADE
假设您需要合并来自两个数据库的记录,但这会导致PK冲突。您现在可以安全地更新其中一个数据库中custid
中的所有PK customers
,并且所有关联的订单会自动与新ID重新关联。
答案 1 :(得分:4)
更新级联也可用于维护参照完整性。当父表的主键不是自动增量的标识值时,这非常有用。