0

所以,我得到:

错误代码:1451。无法删除或更新父行:外键约束失败(playground. Person, CONSTRAINT sk_Person_Parent FOREIGN KEY ( parent_id) REFERENCES Person( id) 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 - ivo 4 - anton。当我按 id 1 删除时,由于 ON DELETE CASCADE,所有记录都会被擦除。但是,如果我尝试执行

UPDATE Person
SET id=10
WHERE id=1;

我得到给定的错误。有任何想法吗?

(我预计vasil的id会变成10,接下来2行的parent_id会更新到10)

4

1 回答 1

2

这是Mysql中的限制:

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

参考这里

于 2016-02-07T15:46:40.437 回答