MySQL 如果父行中不存在,则从子行添加行 table,错误 1452

MySQL add row from child row if not exists in parent table with error 1452

我有两个这样的表:

CREATE TABLE parentTable(
pID    INT,
ArtNr  INT,
Name   VARCHAR(50),
PRIMARY KEY(ID),
UNIQUE KEY (ArtNr)
);

CREATE TABLE childTable(
cID       INT,
ArtNr     INT,
Name      VARCHAR(50),
UNIQUE KEY (ArtNr),
FOREIGN KEY (ArtNr) REFERENCES parentTable(ArtNr) ON UPDATE CASCADE ON DELETE CASCADE
);

现在我遇到的问题是,如果我的 childTable 中有一个带有 ArtNr 的条目,但在我的 parentTable 中找不到,我会收到此错误消息:

1452 Cannot add or update a child row: a foreign key constraint fails (`sys`.`childTable`, CONSTRAINT `childTable_ibfk_1` FOREIGN KEY (`ArtNr`) REFERENCES `parentTable` (`ArtNr`) ON DELETE CASCADE ON UPDATE CASCADE)

我想做的是,如果在我的 parentTable 中找不到 childTable 中的条目,则添加该行。可以吗?

您可以使用服务器变量 FOREIGN_KEY_CHECKS 来 on/off 外键值检查。

例如:

SET FOREIGN_KEY_CHECKS=0;

// ...
// your script...
// ...

SET FOREIGN_KEY_CHECKS=1;

更多信息 - foreign_key_checks.


您可以使用此查询查找丢失的条目 -

SELECT c.* FROM child c
LEFT JOIN parent p
  ON p.id = c.id
WHERE p.id IS NULL;

然后将这组ID插入父table。在 INSERT..SELECT 语句的帮助下完成。