何时使用“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
删除了具有a的父级,parent_id = parent.id
则将自动删除子级中的记录。这应该没问题。
这意味着当id
更新父级时,“ON UPDATE CASCADE”会做同样的事情吗?
如果(1)为真,则意味着如果parent.id
不可更新(或永远不会更新),则不需要使用“ON UPDATE CASCADE”,就像它是AUTO_INCREMENT
或者总是设置为TIMESTAMP
。是对的吗?
如果(2)不成立,在其他什么情况下我们应该使用“ON UPDATE CASCADE”?
如果我(由于某种原因)更新了child.parent_id
不存在的内容,它会被自动删除吗?
好吧,我知道,上面的一些问题可以通过程序测试来理解,但我也想知道这是否依赖于数据库供应商。
请说清楚。
慕容森
慕雪6442864
相关分类