MySql "cannot update parent row"当我有 "ON UPDATE CASCADE"时

标签 mysql sql cascade onupdate

所以,我得到:

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)

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

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 - 阿斯达德 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 递归更新之前在级联期间更新过的同一个表,则其作用类似于 RESTRICT。这意味着您不能使用自引用 ON UPDATE CASCADE 或 ON UPDATE SET NULL 操作。

引用here

关于MySql "cannot update parent row"当我有 "ON UPDATE CASCADE"时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35255362/

相关文章:

php - 为 WHERE 条件选择相等数量的记录

php - SQL查询从另一个表获取数据

sql - 使用滞后窗口函数找到正确的分区

entity-framework-core - EF Core - 为什么 ClientSetNull 是可选关系的默认 OnDelete 行为(而不是 SetNull)

python sqlalchemy - 无法使级联删除工作 - 在 mssql 管理器中

php - 子查询返回数组时如何在yii中添加子查询

mysql - 在 phpmyadmin 中执行多个查询

php - 非 float 价格的 SQL 数值数据是什么?

sql - [表] 中只有 1 行时使用 ' where id IN [table] ' 会影响性能吗?

Android On 删除级联无法正常工作