【问题标题】:Error 1005 Can't create table for adding a foreign key错误 1005 无法创建用于添加外键的表
【发布时间】:2014-10-09 15:53:43
【问题描述】:

我在 MySQL 数据库中有两个 InnoDB 表。现在我喜欢用FOREIGN KEY 将一个表链接到另一个表。但它以错误代码1005 - Can't create table 中止。

我找到了大量有关此错误的信息。例如这篇文章和answer here on SO。尽管即使是这个答案也对我没有帮助。我认为在我的情况下,提到要检查的每一点都不正确。

我已经创建了一个 MySQLFiddle,您可以使用失败的架构签出:http://sqlfiddle.com/#!2/b9dc43

(请注意,用于添加 FOREIGN KEY 的失败 ALTER TABLE 不包括在内。有关 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);

【问题讨论】:

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


    【解决方案1】:

    您正在添加 (element_instance_IDFK, page_IDFK) 作为外键约束,它引用来自 cms_element_instanceID , page_IDFK 列,因此对于这种情况,您需要基于 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

    【讨论】:

    • 我很确定一个 UNIQUE 键就足够了,但你是对的,你需要一个被引用字段组合上的键。
    猜你喜欢
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 2011-06-06
    • 2012-08-07
    • 2016-07-26
    • 2016-09-07
    相关资源
    最近更新 更多