【发布时间】:2010-12-01 16:12:15
【问题描述】:
我经常使用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或始终设置为 @987654333 @。对吗? -
如果 (2) 不成立,在什么情况下我们应该使用
ON UPDATE CASCADE? -
如果我(出于某种原因)将
child.parent_id更新为不存在的东西,它会被自动删除吗?
嗯,我知道,上面的一些问题可以通过编程测试来理解,但我也想知道这些问题是否依赖于数据库供应商。
请多指教。
【问题讨论】:
标签: sql foreign-keys