MySql "cannot update parent row" 当我有 "ON UPDATE CASCADE"
MySql "cannot update parent row" when I have "ON UPDATE CASCADE"
所以,我得到:
Error Code: 1451. Cannot delete or update a parent row: a foreign key
constraint fails (playground
.Person
, CONSTRAINT sk_Person_Parent
FOREIGN KEY (parent_id
) REFERENCES Person
(id
) ON DELETE CASCADE
ON UPDATE CASCADE)
这是简单的 table,引用自身:
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 - 瓦斯科
2 - asdasd
3 - 伊沃
4 - 安东。
当我按 id 1 删除时,所有记录都被擦除,因为 ON DELETE CASCADE。但是,如果我尝试执行
UPDATE Person
SET id=10
WHERE id=1;
我得到了给定的错误。有什么想法吗?
(我希望vasil的id变成10,接下来2行的parent_id更新为10)
限制在Mysql:
如果 ON UPDATE CASCADE 或 ON UPDATE SET NULL 递归更新相同的 table 它之前在级联期间更新过,它的作用类似于 RESTRICT。这意味着您不能使用自引用 ON UPDATE CASCADE 或 ON UPDATE SET NULL 操作。
参考here
所以,我得到:
Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (
playground
.Person
, CONSTRAINTsk_Person_Parent
FOREIGN KEY (parent_id
) REFERENCESPerson
(id
) ON DELETE CASCADE ON UPDATE CASCADE)
这是简单的 table,引用自身:
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 - 瓦斯科 2 - asdasd 3 - 伊沃 4 - 安东。 当我按 id 1 删除时,所有记录都被擦除,因为 ON DELETE CASCADE。但是,如果我尝试执行
UPDATE Person
SET id=10
WHERE id=1;
我得到了给定的错误。有什么想法吗?
(我希望vasil的id变成10,接下来2行的parent_id更新为10)
限制在Mysql:
如果 ON UPDATE CASCADE 或 ON UPDATE SET NULL 递归更新相同的 table 它之前在级联期间更新过,它的作用类似于 RESTRICT。这意味着您不能使用自引用 ON UPDATE CASCADE 或 ON UPDATE SET NULL 操作。
参考here