这个问题在这里已经有答案了:
无法添加或更新子行:外键约束失败(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;
1条答案
按热度按时间njthzxwz1#
这有两种情况:
1-您试图向子表中添加一条记录,但使用的外键值在父表的主键中不存在。
在这种情况下,请仔细检查父表中是否存在该值。可能您正在输入父记录和子记录,但未能添加父记录。在这种情况下,您必须停止,而不是忽略错误并继续添加子级。
2-您的表没有引用完整性,例如
ON DELETE CASCADE
您从父表中删除了一条记录,然后尝试更新子表中的一条记录,该子表的外键引用了父表中的delete记录。在这种情况下,您可能希望删除子级而不是更新它们。考虑将引用完整性添加到表中。