无法添加或更新外键约束失败的子行

Hon*_*oda 1 mysql

1452 - 无法添加或更新子行:外键约束失败 ( projectphp1707. #sql-e6c_cd, CONSTRAINT #sql-e6c_cd_ibfk_1FOREIGN KEY ( order_id) REFERENCES 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;
Run Code Online (Sandbox Code Playgroud)

Rac*_*lan 5

这以以下两种方式之一发生:

1- 您正在尝试向子表添加记录,并且您使用了父表主键中不存在的外键值。

在这种情况下,请仔细检查该值是否存在于父表中。也许您正在输入父记录和子记录,但未能添加父记录。在这种情况下,您必须停止而不是忽略错误并继续添加子项。

2-您的表没有参照完整性,就像ON DELETE CASCADE您从父表中删除了一条记录,然后您尝试更新子表中的记录,该子表的外键引用了父表中的删除记录。

在这种情况下,您可能希望删除子项而不是更新它们。考虑向您的表添加参照完整性。