SQL:更新级联上的自动引用表

时间:2014-07-27 23:34:40

标签: mysql sql foreign-keys

我有一个自动引用外键的表,如下所示:

CREATE TABLE user
(
    id INT,
    name VARCHAR(20),
    ref INT,
    PRIMARY KEY(id)
)ENGINE=InnoDB;

ALTER TABLE user
    ADD FOREIGN KEY (ref) REFERENCES user(id)
    ON DELETE RESTRICT ON UPDATE CASCADE;

然后,我在表格中插入值:

INSERT INTO user 
VALUES(1, "User1", NULL), (2, "User2", 1), (3, "User3", 1), (4, "User4", 3);

SELECT * FROM user;

我更新用户以检查当我更新用户的ID时,FK是否在级联上更新:

UPDATE user 
SET id = 5 
WHERE id = 1;

但是我收到了这个错误:

  

错误1451(23000):无法删除或更新父行:外键约束失败(' prueba'。'用户',CONSTRAINT' user_ibfk1' FOREIGN KEY('参考')参考'用户'(' id')ON UPDATE CASCADE)

谁能说我做错了什么?谢谢。

1 个答案:

答案 0 :(得分:0)

查看开发文档。你的自我指涉" ON UPDATE CASCADE"表现为" ON UPDATE RESTRICT"。

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

如果ON UPDATE CASCADE或ON UPDATE SET NULL递归更新它在级联期间先前已更新的同一个表,它就像RESTRICT一样。这意味着您不能使用自引用ON UPDATE CASCADE或ON UPDATE SET NULL操作。这是为了防止级联更新导致的无限循环。另一方面,自引用ON DELETE SET NULL是可能的,就像自引用ON DELETE CASCADE一样。级联操作可能不会嵌套超过15级。