0

我有两个这样的表:

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 中的条目,则添加该行。有可能这样做吗?

4

1 回答 1

0

您可以使用服务器变量 FOREIGN_KEY_CHECKS 来打开/关闭外键值检查。

例如:

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 插入到父表中。在INSERT..SELECT语句的帮助下完成。

于 2017-03-22T12:58:04.470 回答