繁体   English   中英

外键引用相同表

[英]Foreign Key Referencing Same Table

我搜索得很好,找不到解答问题的答案。 这是我的问题的简化示例。 假设我有一个表testfirstsecond两个字段。 first制作主键,并希望second引用first并在更新时级联。 这将允许我创建一个行列表,知道哪一行在任何给定行之后,除非'head'。

创建表工作正常,但是当我尝试添加一行时,它会抱怨带有级联更新的外键约束失败。 这是有道理的,因为我把second留作null。 因此,我以为我可以插入两行然后添加外键:

  1. first: a second: b
  2. first: b second: a

这很成功。 然后我尝试更新第1行以获得firstc 但是,这没有用,说外键失败了。 为什么? 它不应该只是变成以下?

  1. first: c second: b
  2. 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

我认为问题在于列的结构:

  • 主键不能为空
  • 并且您的引用列已允许空值,(当引用列不为null时不允许)

因此,请确保两列具有相同的数据类型,相同的字符集,而不是两者都是空的。

更新 :问题是外键和引用键是在同一个表中,我已经测试了不同的表,它工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM