MySql"无法更新父行"当我有" ON UPDATE CASCADE"

时间:2016-02-07 15:30:38

标签: mysql sql cascade onupdate

所以,我得到了:

  

错误代码:1451。无法删除或更新父行:外键   约束失败(playgroundPerson,CONSTRAINT sk_Person_Parent   FOREIGN KEY(parent_id)REFERENCES Personid)ON DELETE CASCADE   ON UPDATE CASCADE)

这是一个简单的表,引用自身:

CREATE TABLE IF NOT EXISTS Person (
id int not null primary key,
name varchar(100) not null,
parent_id int null,
CONSTRAINT `sk_Person_Parent`
  FOREIGN KEY (parent_id)
  REFERENCES Person (id)
  ON DELETE CASCADE
  ON UPDATE CASCADE
);

如你所见,有" ON UPDATE CASCADE"。 我在其中插入了4个简单的行:

INSERT INTO Person(id, name, parent_id)
VALUES
(1, 'vasko', NULL), 
(2, 'asdas', 1), 
(3, 'ivo', 1), 
(4, 'anton', 3);

所以我有 1 - vasko   2 - asdasd   3 - 伊沃     4 - 安东。 当我按id 1删除时,由于ON DELETE CASCADE,所有记录都被擦除。但是,如果我尝试执行

UPDATE Person
SET id=10
WHERE id=1;

我得到了给定的错误。有什么想法吗?

(我期待vasil的id变为10,接下来的2行的parent_id将更新为10)

1 个答案:

答案 0 :(得分:2)

在Mysql中有限制:

如果ON UPDATE CASCADE或ON UPDATE SET NULL递归更新它在级联期间先前已更新的同一个表,它就像RESTRICT一样。这意味着您不能使用自引用ON UPDATE CASCADE或ON UPDATE SET NULL操作。

参考here