【发布时间】:2015-05-27 14:19:46
【问题描述】:
每当我尝试像这样从“调查”表中删除调查时:
DELETE FROM surveys WHERE survey_id = 77
它提示我如下所述的错误:
#1451 - 无法删除或更新父行:外键约束失败('user_surveys_archive', CONSTRAINT 'user_surveys_archive_ibfk_6' 外键('user_access_level_id') 参考 'user_surveys' ('user_access_level_id') ON DELETE NO ACTION )
第一件事:我没有任何名称为“user_surveys_archive_ibfk_6”的此类表
第二件事:其他表中没有本次调查的记录。
知道如何删除这条修复此问题的记录吗?
编辑
这是我在导出表格调查的表格约束时发现的行
ALTER TABLE `surveys`
ADD CONSTRAINT `surveys_ibfk_1` FOREIGN KEY (`survey_type_id`) REFERENCES `survey_types` (`survey_type_id`) ON DELETE CASCADE ON UPDATE NO ACTION;`
【问题讨论】:
-
user_surveys_archive_ibfk_6是外键约束的名称,通常可以是您想要的任何东西 - 毕竟它只是一个名称。它看起来像一个自动生成的,所以它很可能在user_surveys_archive表中。 -
但是调查表中没有标题为“user_access_level_id”的列。关于如何调试它的任何想法?
-
也许您在关闭 foreign_key_checks 的情况下执行了一些
alter查询,从而破坏了 FK 系统。一旦重新启用检查,mysql 将不会扫描数据库以验证所有 FK 是否正常工作,因此在您尝试使用/引用现在不存在的字段/表的查询之前您不会注意到。 -
它会隐藏错误,因为您已禁用 FK 检查。它不会解决问题...
-
surveys上的外键不是问题所在。您需要查看user_surveys表上的外键。正如我在回答中解释的那样,我们预计这将是FOREIGN KEY (survey_id) REFERENCES surveys(survey_id) ON DELETE CASCADE。