错误1005无法创建用于添加外键的表

时间:2014-10-09 07:46:17

标签: mysql sql foreign-keys foreign-key-relationship

我在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);

1 个答案:

答案 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