我经常使用“ ON DELETE CASCADE”,但是我从不使用“ ON UPDATE CASCADE”,因为我不确定在什么情况下它会有用。
为了讨论起见,让我们看一些代码。
CREATE TABLE parent (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
);
CREATE TABLE child (
id INT NOT NULL AUTO_INCREMENT, parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id)
REFERENCES parent(id)
ON DELETE CASCADE
);
对于“ ON DELETE CASCADE”,如果id
删除带有的父级,则带有的子级中的记录parent_id = parent.id
将被自动删除。这应该没问题。
这意味着在更新
id
父级时“ ON UPDATE CASCADE”会做同样的事情吗?如果(1)为true,则意味着如果
parent.id
不可更新(或永远不会被更新)(如当它AUTO_INCREMENT
始终为或时),则无需使用“ ON UPDATE CASCADE”TIMESTAMP
。那正确吗?如果(2)不正确,在其他情况下,我们应该使用“ ON UPDATE CASCADE”吗?
如果我(出于某种原因)
child.parent_id
将其更新为不存在的内容,然后会被自动删除怎么办?
好吧,我知道,上面的一些问题可以通过编程测试来理解,但我也想知道其中是否有任何数据库供应商依赖性。
请说明一下。