在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)
答案 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_idsourcecodes_tags标签左侧加入源代码sc在tags.sourcecode_id = sc.id
其中sc.id为null;
答案 3 :(得分:0)
删除ON DELETE CASCADE ON UPDATE CASCADE
答案 4 :(得分:0)
虽然这已经过时了,但我想我会分享一下,我解决这个问题的方法是检查编码和整理是否在两边都是相同的,由于某种原因是不同的。
这解决了这个问题。