【问题标题】:Trying to update two tables at once MySQL尝试一次更新两个表 MySQL
【发布时间】:2014-01-20 06:10:16
【问题描述】:

我一直在尝试使我的数据库正常工作,以便将不同表中的cuisineid 列链接在一​​起。我已经在两个表上定义了主键和外键,但是当我现在尝试更新它们时,我得到了这个错误:

Insert failed: Cannot add or update a child row: a foreign key constraint fails 
(`ml11maj_Databasetest`.`Nation`, CONSTRAINT `Foreign Key` FOREIGN KEY (`cuisineid`) 
REFERENCES `recipename` (`cuisineid`) ON DELETE CASCADE ON UPDATE CASCADE)

上传的其余部分工作,但没有任何内容添加到Nation(cuisine id 是主键,当前设置为 AI) 表中,当前插入的代码如下所示

if ($cuisine !=''){
  $query = "INSERT INTO`Nation`(cuisine_type)VALUES('$cuisine')";
  mysqli_select_db($db_server, $db_database); 
  mysqli_query($db_server, $query) or
  die("Insert failed: " . mysqli_error($db_server));
}

编辑 国家表包含两列

-Cuisine_type Varchar -cuisineid int 主要

配方名称表

-recipeid int(255) AUTO_INCREMENT -餐名文本
-b_l_d varchar(30) -成分文本
-小时 int(11)
-分钟 int(11)
-配方文本 utf8_bin
-feeds int(11)
-imagepath varchar(100)
-userid int(11)
-cuisineid int(255)

【问题讨论】:

  • 您插入的是 cuisine_type 而不是 cuisine_id
  • 请发布您的Nation 表和任何其他带有互锁键的表的定义。
  • 我已经用我的表定义更新了问题,美食 ID 是 Nation 表中的自动递增,所以我如何在我的查询中包含它?

标签: php mysql database relation


【解决方案1】:

您的插入没有美食 ID,因此外键约束失败,正如它告诉您的那样。如果您希望该列为 NULLABLE,那么您可以在插入中省略 food_id 列。

【讨论】:

  • 我很困惑,因为 foodid 是 Nation 中的自动递增列,所以我无法为其定义变量
  • 然后你把你的 FK 放在了错误的表上,因为你已经设置了 country.cuisine_id 应该引用 recipename 表中的主键。
  • 当我尝试更改另一张桌子上的 FK 时出现此错误? #1452 - Cannot add or update a child row: a foreign key constraint fails (ml11maj_Databasetest.#sql-5a08_197ee, CONSTRAINT Foreign Key` FOREIGN KEY (cuisineid) REFERENCES Nation (cuisineid) ON DELETE CASCADE ON UPDATE CASCADE)`
  • 看起来您现在正在执行此操作,请确保列的大小、类型、无符号等完全相同。还要确保 recipename 中没有具有无效美食 ID 的行
  • 我现在已经在 phpmyadmin 上正确定义了键,但是当我尝试上传时,我仍然收到同样的错误插入失败。无法添加或更新子行:外键约束失败 (ml11maj_Databasetest.recipename, CONSTRAINT Foreign Key FOREIGN KEY (cuisineid) REFERENCES Nation (cuisineid) ON DELETE CASCADE ON UPDATE CASCADE)
猜你喜欢
  • 1970-01-01
  • 2013-06-24
  • 2011-12-14
  • 1970-01-01
  • 2015-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
相关资源
最近更新 更多