2
我搜索得很好,找不到解决问题的答案。这是我的问题的一个简单例子。假设我有一个表test
,其中有两个字段first
和second
。我做first
的主键,并要second
参考first
和级联更新。这将允许我创建一个行列表,知道哪个行在任何给定行之后,除非是'head'。外键参考相同表
创建表格工作正常,但是当我尝试添加一行时,它抱怨带级联更新的外键约束失败。这是有道理的,因为我离开second
为空。因此,我以为我可以插入两行,然后添加外键:
first: a second: b
first: b second: a
这是成功的。然后我尝试更新第1行,得到的值为c
。但是,这不起作用,说明外键失败。为什么?它不应该成为以下吗?
first: c second: b
first: 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
主键不是空的,因为它将是第一行的c和第二行的b。而且,引用列也不会有空值。第一行是b,第二行是c。 –
它不会有空值,但?请你可以粘贴'show create table test'来查看结构。谢谢 –
当然,编辑我的问题与结果。 –