首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我收到错误代码1452无法添加或更新子行

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

Stack Overflow用户
提问于 2019-04-24 10:06:21
回答 2查看 69关注 0票数 0

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

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

表:订单详情

代码语言:javascript
复制
Columns:
OrderID int(11) PK 
ProductID int(11) PK

表:产品

代码语言:javascript
复制
Columns:
productid int(11) AI PK
代码语言:javascript
复制
ALTER TABLE orderdetails
     ADD CONSTRAINT fk_od_prodid
     FOREIGN KEY (ProductID) REFERENCES products(productid);

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

EN

回答 2

Stack Overflow用户

发布于 2019-04-24 10:52:39

这通常发生在其中一行已经存在于子表orderdetails中,而不在父表products中时。

您可以忽略该错误并使用以下命令临时强制它

代码语言:javascript
复制
SET FOREIGN_KEY_CHECKS=0;
ALTER TABLE orderdetails
     ADD CONSTRAINT fk_od_prodid
     FOREIGN KEY (ProductID) REFERENCES products(productid);
SET FOREIGN_KEY_CHECKS=1; 

或者,要查找违规记录,请使用

代码语言:javascript
复制
SELECT o.* 
FROM orderdetails AS o 
LEFT JOIN products AS p 
ON p.productid = o.ProductID 
WHERE p.productid IS NULL;

并删除违规记录

(仅影响orderdetails表,不修改products。)

代码语言:javascript
复制
DELETE o
FROM orderdetails AS o
LEFT JOIN products AS p
ON p.productid = o.ProductID
WHERE p.productid IS NULL;

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

票数 0
EN

Stack Overflow用户

发布于 2019-04-27 11:31:28

我终于发现哪里出了问题。子表中有两个不在父表中的值。我删除了这些记录,我的错误就消失了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55821382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档