我正在尝试将一个外键添加到具有组合键的表中。我可以为第一列添加外键,但不能为第二列添加外键。
我已经搜索了stackoverflow,阅读了所有类似的问题。我在网上找过了。我已经对照子表检查了父表,列定义似乎是相同的。我已经检查了列名的拼写。我使用了另一个对另一个外键有效的alter语句。我不知所措。
表:订单详情
Columns:
OrderID int(11) PK
ProductID int(11) PK表:产品
Columns:
productid int(11) AI PKALTER TABLE orderdetails
ADD CONSTRAINT fk_od_prodid
FOREIGN KEY (ProductID) REFERENCES products(productid);我希望创建外键,但却得到了错误代码1452。
发布于 2019-04-24 10:52:39
这通常发生在其中一行已经存在于子表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语句应该可以正常工作。
发布于 2019-04-27 11:31:28
我终于发现哪里出了问题。子表中有两个不在父表中的值。我删除了这些记录,我的错误就消失了。
https://stackoverflow.com/questions/55821382
复制相似问题