【问题标题】:MY SQL Foreign Key Constraint ErrorMY SQL 外键约束错误
【发布时间】:2015-04-03 05:30:58
【问题描述】:

我正在使用 MySQL 数据库作为我的应用程序的后端。我在玩数据库,几天前我做错了,现在我无法在我的数据库表上应用外键。 我有 2 张桌子 shoplocation 和 pizaorderdetail。在 Pizzaordrdetail 中,我将来自 shoplocation 的 id 作为外键传递。我收到以下错误。该表中已包含数据。早些时候我在pizzaorderdetail上有外键约束,但不知何故它被删除了。请帮我解决这个错误。

执行: 更改表order.pizzaorderdetail 添加索引FK_idxLocationIDASC); 更改表order.pizzaorderdetail 添加约束FK 外键 (LocationID) 参考order.location (id) 删除无操作 更新无操作;

操作失败:将 SQL 脚本应用到数据库时出错。 错误 1452:无法添加或更新子行:外键约束失败 (order.#sql-714_31, CONSTRAINT FK 外键 (LocationID) 引用 location (id) ON DELETE NO ACTION ON更新无操作) SQL 语句: 更改表order.pizzaorderdetail 添加约束FK 外键 (LocationID) 参考order.location (id) 删除无操作 更新无操作

【问题讨论】:

  • 我通过禁用外键检查找到了临时解决方案,然后应用约束并再次应用外键检查。这是正确的方法吗?
  • 如果表中的数据是正确的,那么就是类型问题。尝试检查两个表中的 id。 (相同的类型,长度,无符号......)。它们应该完全相同

标签: mysql


【解决方案1】:

您需要检查您的 FK 是否正常。当我收到这条消息时,我刚刚删除了我的 FK,它已经解决了。

根据手册:https://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html

当您尝试删除最后一个索引时,InnoDB 报告此错误 可以强制执行特定的引用约束。

为了获得 DML 语句的最佳性能,InnoDB 需要一个索引 存在于外键列上,以便进行 UPDATE 和 DELETE 操作 在父表上可以很容易地检查对应的行是否存在于 子表。 MySQL 自动创建或删除此类索引 需要时,作为 CREATE TABLE、CREATE INDEX 和 ALTER 的副作用 TABLE 语句。

当你删除一个索引时,InnoDB 会检查该索引是否用于 检查外键约束。删除索引仍然可以,如果 还有另一个索引可以用来执行相同的 约束。 InnoDB 阻止你删除最后一个可以 强制执行特定的引用约束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    相关资源
    最近更新 更多