[英]Error on creating foreign key relationship between non-primary key
我有两个桌子
CREATE TABLE `abc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ref_id` varchar(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ref_id_UNIQUE` (`ref_id`)
)
CREATE TABLE `xyz` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ref_id` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ref_id_UNIQUE` (`ref_id`)
)
我想在xyz的ref_id和abc的ref_id之间建立外键关系,但是Mysql给出错误1215。
您应该将外键与主键建立关系。 我知道MySQL允许带有索引的任何东西都具有外键关系。 但是正确的做法是使用主键。
因此,像这样声明表:
CREATE TABLE `xyz` (
`id` int(11) NOT NULL AUTO_INCREMENT,
abc_id int DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ref_id_UNIQUE` (`abc_id`),
ADD CONSTRAINT fk_xyz_abc FOREIGN KEY (abc_id) REFERENCES abc(id)
);
如果您想要xyz
行的ref_id
,则使用JOIN
获取信息。
看一下戈登·利诺夫(Gordon Linoff)的答案,他的建议是有道理的,即使它没有回答问题。 那么,当您打算创建foreign key
关系时,什么会导致错误? 明显的可能是语法错误和拼写错误,因此您将需要检查并纠正所有此类问题。
另一种可能性是您有不一致之处,即您尝试在一个table
创建foreign key
约束,但并非所有值都具有完全匹配的值。 因此,假设您具有Foo
和Bar
表,并且打算将Foo.lorem
引用Bar.ipsum
的foreign key
,那么您需要确保Foo.lorem
所有值都具有一个Bar.ipsum
对,并且完全相同的值( null
除外)。 如果不正确,那么您的foreign key
约束将不会成功创建。 查找此类不一致之处:
select distinct Foo.lorem
from Foo
where not (Foo.lorem is null) and
not exists (select 1 from Bar where Foo.lorem = Bar.ipsum);
仔细阅读这些行,并确保您修复了任何此类Foo.lorem
值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.