我有两个表
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。
您应该与 primary密钥的外键关系。我知道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)
);
如果您想要ref_id
的CC_1行,请使用JOIN
获取信息。
看戈登·林夫(Gordon Linoff)的回答,即使他没有回答问题,他的建议也很有意义。那么,当您打算创建foreign key
关系时,什么会导致错误?显而易见的可能性是语法错误和错别字,因此您需要对这些错误进行检查并解决任何此类问题。
另一种可能性是您有不一致的情况,也就是说,您尝试在table
S之一中创建foreign key
约束,但并非所有值都具有确切的匹配。因此,假设您拥有Foo
和Bar
表,并且您打算将Foo.lorem
作为foreign key
引用Bar.ipsum
,那么您将需要确保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
值。