我经常使用 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
不能更新(或永远不会被更新),例如当它为AUTO_INCREMENT
或始终设置为TIMESTAMP
时,则不需要使用ON UPDATE CASCADE
。这正确吗?如果(2)不成立,在什么其他情况下应该使用
ON UPDATE CASCADE
?如果我因某种原因将
child.parent_id
更新为不存在的值,那么它是否会被自动删除?
好的,我知道,上面的一些问题可以通过编程测试来理解,但我也想知道其中是否依赖于数据库供应商。
请给出一些指导。