【发布时间】:2016-11-18 07:50:22
【问题描述】:
我搜索得很好,但找不到能很好地解释问题的答案。这是我的问题的简化示例。假设我有一个表test 有两个字段first 和second。我将first 设为主键并希望second 引用first 并在更新时进行级联。这将允许我制作一个行列表,知道哪一行在任何给定行之后,除非“头”。
创建表工作正常,但是当我尝试添加一行时,它抱怨具有级联更新的外键约束失败。这是有道理的,因为我将second 保留为空。因此,我想我可以插入两行,然后添加外键:
first: a second: bfirst: b second: a
这很成功。然后我尝试更新第 1 行以使 first 值为 c。但是,这不起作用,说明外键失败。为什么?不应该变成下面这样吗?
first: c second: bfirst: b second: c
我唯一的预感是循环更新的存在,第 1 行的更新级联到第 2 行,再级联到第 1 行,但这不应该发生!没有任何引用 second,因此更新应该只是级联到第 2 行并停止。请帮忙,这快把我逼疯了。
编辑:根据要求,这是我的show create table test。
CREATE TABLE `test` (
`first` varchar(32) NOT NULL,
`second` varchar(32) NOT NULL,
PRIMARY KEY (`first`),
KEY `fk` (`second`),
CONSTRAINT `fk` FOREIGN KEY (`second`) REFERENCES `test` (`first`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1
【问题讨论】:
标签: mysql sql foreign-keys key