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 语句的帮助下完成。
我有两个这样的表:
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 语句的帮助下完成。