虚假外键约束失败难题
尝试删除表时,您遇到神秘的错误消息:“无法删除或更新父行:外键约束失败。”尽管确认数据库中不存在任何外键引用,但还是出现了这个令人困惑的问题。
调查表结构发现它在“area_id”列上拥有一个主键,在“nombre_area”列上拥有一个唯一键。考虑到数据库中没有任何外键约束,它违背了为什么该表会阻碍删除过程的逻辑。
经过进一步探索,出现了一个奇怪的发现:使用 MySQL 查询浏览器或 phpMyAdmin 会导致为每个查询创建单独的连接,这与预期相反。这就需要在单个查询中执行所有 drop 语句来解决该问题。
以下代码片段封装了此解决方案:
SET FOREIGN_KEY_CHECKS=0; DROP TABLE my_first_table_to_drop; DROP TABLE my_second_table_to_drop; SET FOREIGN_KEY_CHECKS=1;
将 FOREIGN_KEY_CHECKS 设置为 0 会暂时禁用外键检查,允许在不受干扰的情况下删除表。一旦表被删除,FOREIGN_KEY_CHECKS 就会设置回 1,确保将来的外键约束得到执行。
这种特殊的行为突出了使用 SET FOREIGN_KEY_CHECKS 命令动态控制外键约束的重要性,特别是在使用每个查询建立多个连接的数据库管理工具。
以上是为什么我不能删除该表?即使没有外键约束,外键约束也会失败!的详细内容。更多信息请关注PHP中文网其他相关文章!