如果外键约束失败,则无法添加或更新子行

slmsl1lt  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(531)

这个问题在这里已经有答案了

无法添加或更新子行:外键约束失败(24个答案)
两年前关门了。

1452-无法添加或更新子行:外键约束失败(projectphp1707.#sql-e6c_cd,constraint#sql-e6c_cd#ibfk_1外键(order_id)引用tbl_order(order_id))

表1:

表2:

CREATE TABLE `tbl_order` (
  `order_id` int(11) NOT NULL,
  `user_id` int(11) DEFAULT NULL,
  `cus_fullname` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `total_price` double DEFAULT NULL,
  `active` tinyint(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `tbl_payment` (
  `pay_id` int(50) NOT NULL,
  `pro_id` int(15) NOT NULL,
  `pay_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `pay_email` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `pay_adress` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `pay_cardname` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `pay_cvc` int(3) NOT NULL,
  `pay_number` text COLLATE utf32_unicode_ci NOT NULL,
  `pay_mm` int(2) NOT NULL,
  `pay_yyyy` int(4) NOT NULL,
  `pay_totals` varchar(255) COLLATE utf32_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf32 COLLATE=utf32_unicode_ci;
njthzxwz

njthzxwz1#

这有两种情况:
1-您试图向子表中添加一条记录,但使用的外键值在父表的主键中不存在。
在这种情况下,请仔细检查父表中是否存在该值。可能您正在输入父记录和子记录,但未能添加父记录。在这种情况下,您必须停止,而不是忽略错误并继续添加子级。
2-您的表没有引用完整性,例如 ON DELETE CASCADE 您从父表中删除了一条记录,然后尝试更新子表中的一条记录,该子表的外键引用了父表中的delete记录。
在这种情况下,您可能希望删除子级而不是更新它们。考虑将引用完整性添加到表中。

相关问题