最佳答案
我经常使用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)为真,这意味着如果parent.id
不可更新(或永远不会更新),就不需要使用ON UPDATE CASCADE
,比如当它是AUTO_INCREMENT
或总是设置为TIMESTAMP
时。对吗?
如果(2)不为真,在其他哪种情况下我们应该使用ON UPDATE CASCADE
?
child.parent_id
更新为不存在的东西,它会被自动删除吗?
好吧,我知道,上面的一些问题可以通过编程测试来理解,但我也想知道这其中是否有依赖于数据库供应商的。
请照点光。