Mysql,innodb - 无法创建外键

时间:2012-04-11 14:50:28

标签: mysql foreign-keys innodb

使用默认引擎(MyIsam),我可以使用以下语法创建外键:

alter table `codes` add constraint foreign key(`associated_code_id`) references ask_codes(code_id)  on update cascade on delete cascade;

然而,当我使用INNODB创建表时,我不再能够创建外键(mysql给我ERROR 1005(HY000):无法创建表'my_table。#sql-3311_16115'(错误号:150 ))。

这是语法问题吗?谢谢你的帮助,

4 个答案:

答案 0 :(得分:6)

问题是两列的类型不同 - 它们不完全匹配:

  

如果重新创建已删除的表,则必须具有定义   符合引用它的外键约束。它必须   拥有正确的列名和类型,并且必须具有索引   如前所述,引用的密钥。如果不满意,MySQL   返回错误号1005并在错误中引用错误150   消息。

答案 1 :(得分:1)

我添加@ phpGeek的好答案,你也需要在数值中使用相同的LENGTH,这意味着如果表A有“id INT(11)”,表B也必须有“A_id INT(11)”。 / p>

答案 2 :(得分:0)

当你运行MyISAM表的ALTER语句时,如果我没记错的话,它会默默地忽略FK约束。当您为InnoDB运行它时,它会尝试通过将约束应用于表来验证约束。我认为当现有行的FK约束失败时会发生此错误 - InnoDB Error Codes

您可以尝试以下查询来查看哪些值阻止了约束创建 -

SELECT *
FROM codes
LEFT JOIN ask_codes
    ON codes.associated_code_id = ask_codes.code_id
WHERE ask_codes.code_id IS NULL

答案 3 :(得分:-5)

我认为这只是InnoDB的一个限制。它不支持外键。至少这就是我上次打击我时离开这个问题的方式。