我使用MySQL数据库作为我的应用程序的后端。我正在玩数据库,几天前我做错了什么,现在我无法在我的数据库表上应用外键。 我有2个表shoplocation和pizaorderdetail。在pizzaordrdetail,我将商店中的id作为外键传递。我得到了以下错误。该表已包含数据。早些时候我在pizzaorderdetail上有外键约束,但不知怎的,它被删除了。请帮我解决此错误。
执行:
ALTER TABLE order
。pizzaorderdetail
ADD INDEX FK_idx
(LocationID
ASC);
ALTER TABLE order
。pizzaorderdetail
添加约束FK
外键(LocationID
)
参考order
。location
(id
)
无法删除操作
ON UPDATE NO ACTION;
操作失败:将SQL脚本应用于数据库时出错。
错误1452:无法添加或更新子行:外键约束失败(order
。#sql-714_31
,CONSTRAINT FK
FOREIGN KEY(LocationID
)参考location
(id
)ON更新没有动作更新无动作)
SQL语句:
ALTER TABLE order
。pizzaorderdetail
添加约束FK
外键(LocationID
)
参考order
。location
(id
)
无法删除操作
ON UPDATE NO ACTION
答案 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阻止您删除可以的最后一个索引 强制执行特定的引用约束。