我有一个自动引用外键的表,如下所示:
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)
谁能说我做错了什么?谢谢。
答案 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级。