我在MySQL数据库中有两个InnoDB表。现在我想用FOREIGN KEY
将一个表链接到另一个表。但是它会以错误代码1005 - Can't create table
中止。
我发现了很多关于此错误的信息。例如,这篇文章和answer here on SO。虽然这个答案在我的案例中没有帮助。我认为在我的案例中,提到的所有要点都是不正确的。
我创建了一个MySQLFiddle,您可以使用失败的架构结帐:http://sqlfiddle.com/#!2/b9dc43
(请注意,添加ALTER TABLE
的失败FOREIGN KEY
未包含在内。请参阅下面的架构了解FOREIGN KEY查询。)
还有cms_element_instance.page_IDFK
的FK,它引用了列page.ID
,但我删除了这个FK,以便在SO上发布我的问题。
这里有什么问题?
这里是纯文本的架构:
CREATE TABLE `cms_element_instance` (
`ID` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`page_IDFK` mediumint(8) unsigned DEFAULT NULL,
`revision` varchar(16) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `page_IDFK` (`page_IDFK`)
) ENGINE=InnoDB AUTO_INCREMENT=1692 DEFAULT CHARSET=utf8;
CREATE TABLE `element_faq_list` (
`element_instance_IDFK` mediumint(8) unsigned NOT NULL,
`page_IDFK` mediumint(8) unsigned NOT NULL,
`mod_faq_collection_IDFK` mediumint(8) unsigned NOT NULL,
PRIMARY KEY (`element_instance_IDFK`,`page_IDFK`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Create FK: This throws error 1005
ALTER TABLE element_faq_list
ADD CONSTRAINT element_instance_fk
FOREIGN KEY (element_instance_IDFK, page_IDFK)
REFERENCES cms_element_instance( ID , page_IDFK);
答案 0 :(得分:3)
您正在添加(element_instance_IDFK, page_IDFK)
作为外键约束,引用ID , page_IDFK
中的cms_element_instance
列,因此在这种情况下,您需要基于ID , page_IDFK
列的主键
ALTER TABLE `cms_element_instance` CHANGE `page_IDFK` `page_IDFK`
MEDIUMINT(8) UNSIGNED NOT NULL, DROP PRIMARY KEY,
ADD PRIMARY KEY (`ID`, `page_IDFK`);
Demo