什么时候使用"ON UPDATE CASCADE"
什么时候使用"ON UPDATE CASCADE"
我经常使用 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
更新为不存在的值,它会自动删除吗?
我知道,上面的一些问题可以通过编程进行测试以了解,但我还想知道这是否取决于数据库供应商。
请给予一些启示。
admin 更改状态以发布 2023年5月21日