我的SQL外键约束错误

时间:2015-02-03 21:08:08

标签: mysql

我使用MySQL数据库作为我的应用程序的后端。我正在玩数据库,几天前我做错了什么,现在我无法在我的数据库表上应用外键。 我有2个表shoplocation和pizaorderdetail。在pizzaordrdetail,我将商店中的id作为外键传递。我得到了以下错误。该表已包含数据。早些时候我在pizzaorderdetail上有外键约束,但不知怎的,它被删除了。请帮我解决此错误。

执行: ALTER TABLE orderpizzaorderdetail ADD INDEX FK_idxLocationID ASC); ALTER TABLE orderpizzaorderdetail 添加约束FK   外键(LocationID)   参考orderlocationid)   无法删除操作   ON UPDATE NO ACTION;

操作失败:将SQL脚本应用于数据库时出错。 错误1452:无法添加或更新子行:外键约束失败(order#sql-714_31,CONSTRAINT FK FOREIGN KEY(LocationID)参考locationid)ON更新没有动作更新无动作) SQL语句: ALTER TABLE orderpizzaorderdetail 添加约束FK   外键(LocationID)   参考orderlocationid)   无法删除操作   ON UPDATE NO ACTION

1 个答案:

答案 0 :(得分:0)

您需要检查您的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阻止您删除可以的最后一个索引   强制执行特定的引用约束。