Mat*_*ich 5 mysql sql key foreign-keys
我搜索得很好,但找不到可以很好地解释问题的答案。这是我的问题的一个简化示例。假设我有一个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
Run Code Online (Sandbox Code Playgroud)
我认为问题出在列的结构上:
因此,请确保两列具有相同的数据类型、相同的字符集,且两者都不为空。
更新:问题是外键和引用键位于同一个表中,我已经使用不同的表进行了测试并且它有效。
| 归档时间: |
|
| 查看次数: |
2633 次 |
| 最近记录: |