gpt4 book ai didi

mysql - 为什么我收到错误代码 1452 无法添加或更新子行

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

我正在尝试将外键添加到具有组合键的表中。我能够为第一列添加外键,但不能为第二列添加外键。

我搜索了 stackoverflow,阅读了所有类似的问题。我在网上搜索过。我已对照子表检查了父表,列定义似乎是相同的。我已经检查了列名称的拼写。我使用了另一个适用于另一个外键的 alter 语句。我很茫然。

表:订单详细信息

Columns:
OrderID int(11) PK
ProductID int(11) PK

表:产品

Columns:
productid int(11) AI PK
ALTER TABLE orderdetails
ADD CONSTRAINT fk_od_prodid
FOREIGN KEY (ProductID) REFERENCES products(productid);

我希望创建外键,但收到错误代码 1452。

最佳答案

当子表 orderdetails 中已存在某一行,但父表 products 中不存在该行时,通常会发生这种情况。

您可以忽略该错误并使用暂时强制执行

SET FOREIGN_KEY_CHECKS=0;
ALTER TABLE orderdetails
ADD CONSTRAINT fk_od_prodid
FOREIGN KEY (ProductID) REFERENCES products(productid);
SET FOREIGN_KEY_CHECKS=1;

或者查找有问题的记录使用

SELECT o.* 
FROM orderdetails AS o
LEFT JOIN products AS p
ON p.productid = o.ProductID
WHERE p.productid IS NULL;

并删除违规记录
(仅影响orderdetails表,保持products不变。)

DELETE o
FROM orderdetails AS o
LEFT JOIN products AS p
ON p.productid = o.ProductID
WHERE p.productid IS NULL;

删除有问题的记录后,您的 ALTER 语句应该可以正常工作。

关于mysql - 为什么我收到错误代码 1452 无法添加或更新子行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55821382/

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