无法在InnoDB中添加外键

时间:2011-12-24 23:38:54

标签: mysql

在phpMyAdmin中,当我尝试添加外键时,会发生一些错误并且不会告诉我有什么问题。只是说“FK失败了”。

任何人都可以说出问题是什么吗?

Error

SQL query:

ALTER TABLE `hotel` ADD FOREIGN KEY ( `type_id` ) REFERENCES `hotel`.`hotel_type` (
`id`
) ON DELETE CASCADE ON UPDATE CASCADE ;

MySQL said: Documentation
#1452 - Cannot add or update a child row: a foreign key constraint fails (`hotel`.`#sql-cfc_e`, CONSTRAINT `#sql-cfc_e_ibfk_2` FOREIGN KEY (`type_id`) REFERENCES `hotel_type` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) 

5 个答案:

答案 0 :(得分:6)

确保两个表的列具有相同的数据类型:

hotel.hotel type_id int(11) unsigned # type_id column of hotel table

hotel.hotel_type id int(11) unsigned # id column of hotel_type table

如果它们的类型不同,那么您将无法添加FK约束。

- 编辑 -

根据您的响应,列是相同的数据类型,因此这意味着hotels.type_id列中的值无效(hotel_types表中不存在值)。检查hotels.type_id列中的值,确保它们存在于您的hotel_types.id列中。

答案 1 :(得分:2)

嗯,您可能有很多原因无法创建外键。我找到了一个非常有趣的article,我建议你仔细阅读。也许有些东西会帮助你。您还可以在MySQL手册中找到关于“FOREIGN KEY Constraints”的非常重要的信息。

希望这会有所帮助。

答案 2 :(得分:1)

您的表中有一些数据在其他表中不再存在,实际上这违反了外键规则。

如果您不需要他们的数据,请截断两个表,然后添加外键,否则您应该逐个添加所有外键。

这是一个查找这些行的查询:

  

中选择sourcecode_id      

sourcecodes_tags标签左侧加入源代码sc在tags.sourcecode_id = sc.id

     

其中sc.id为null;

答案 3 :(得分:0)

删除ON DELETE CASCADE ON UPDATE CASCADE

答案 4 :(得分:0)

虽然这已经过时了,但我想我会分享一下,我解决这个问题的方法是检查编码和整理是否在两边都是相同的,由于某种原因是不同的。

这解决了这个问题。