gpt4 book ai didi

mysql - 一段时间后外键 "breaks"

转载 作者:行者123 更新时间:2023-11-29 05:28:12 26 4
gpt4 key购买 nike

应用程序成功运行几天后,我突然看到错误:

Cannot add or update a child row: a foreign key constraint fails

如果我在应用程序上下文之外运行 SQL 肯定会失败。

数据看起来不错,之前的约束也有效。此外,如果我删除约束并按原样将它们添加回去,一切都会再次起作用。

我必须检查并删除/添加约束,直到一切恢复正常。

关于我在这里可能做错了什么或快速重新创建所有 FK 的快速方法有什么想法吗?

示例 FK 约束:

CONSTRAINT `FKC92ACD965FF39405` FOREIGN KEY (`foodItem_id`) REFERENCES `FoodItem` (`id`),
CONSTRAINT `FKC92ACD966C592425` FOREIGN KEY (`meal_id`) REFERENCES `Meal` (`id`)

示例 SQL:

    into MealItem
(foodItem_id, meal_id, quantity)
values(150, 277, 0.375)

谢谢,布鲁斯

最佳答案

我从未听说过 InnoDB 外键间歇性工作并且需要删除并重新创建的情况。我不建议您养成运行不必要的 ALTER TABLE 语句的习惯。

更可能的解释是,您首先尝试在 FoodItemMeal 中引用的行之前插入一行到 MealItem插入。

您可以通过运行找到有关违反的确切外键约束的更多信息:

mysql> pager less
mysql> SHOW ENGINE INNODB STATUS;

查找类似以下内容的小节:

------------------------
LATEST FOREIGN KEY ERROR
------------------------
...some information about the transaction and thread context...
insert into MealItem (foodItem_id, meal_id, quantity) values(150, 277, 0.375)
Foreign key constraint fails for table `mydatabase/MealTime`:
CONSTRAINT `FKC92ACD965FF39405` FOREIGN KEY (`foodItem_id`) REFERENCES `FoodItem` (`id`),
Trying to add in child table, in index `foodItem_id` tuple:
DATA TUPLE: 2 fields; ...some binary description of the row you tried to insert... 
But in parent table `mydatabase/FoodItem`, in index `PRIMARY`,the closest match we can find is record:
...some binary description of MySQL's guess at a row near the one that's missing...

我模拟了这个例子,并省略了一些不太有用的东西。此诊断信息相对容易阅读(与某些相比)。从这里您可以准确地发现哪个约束有冲突,以及哪个父表缺少所需的行。


回复你的评论:

您不会碰巧在 5.5.8 和 5.5.12 之间使用 OS X 和 MySQL 吧?我发现你提到的错误是指出现在特定版本的 MySQL 中的错误,并且只出现在 OS X 上。详情在这里:http://bugs.mysql.com/bug.php?id=60309

如果您至少升级到 5.5.13,或者最好升级到最新版本,应该会修复该错误
(2013 年 6 月 5.5.32)。

关于mysql - 一段时间后外键 "breaks",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17575993/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com