2017-03-22 28 views
0

我有兩個表像這樣:的MySQL從子行添加行如果不是在父表中存在錯誤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條目,在我的父表中找不到,我得到這個錯誤信息:

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) 

什麼我想要做的是,如果childTable中的條目未在我的父表中找到,添加行。有可能這樣做嗎?

+0

你想要什麼?您已創建外鍵約束。現在,試圖避免它。 – Devart

+0

不,我只是想將缺少的條目添加到父表中 – Alex

+0

看看答案(第2部分)。 – Devart

回答

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聲明的幫助下做到這一點。

+0

謝謝,但這不會幫助添加缺少的條目 – Alex

+0

顯示您的完整腳本。 – Devart

+0

謝謝你..用這個聲明我找到了缺失的條目 – Alex

相關問題