2011-12-21 115 views
2

我插入一些數據分爲以下MySQL表genotypegene:MySQL錯誤1452不能插入數據

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`populationdb`.`genotypegene`, CONSTRAINT `genotypegene_ibfk_2` FOREIGN KEY (`Gene`) REFERENCES `gene` (`Gene`)) 

我插入數據到這個表是: Genotype1,基因1 Genotype1,基因2 Genotype1,基因3 Genotype1,Gene4

基因型表中有一個Genotype1拷貝,其思想是每個基因型可以包含許多基因,但每個基因可以存在多種基因型(目前只有1種基因型,但後來我會插入更多)。我讀here,我可以關閉外鍵檢查,但我不願意這樣做,不知道這個錯誤的原因。這是因爲基因型表中只有一個Genotype1拷貝? (我已經檢查過Genotype1,Gene1等在主鍵表中的格式/拼寫相同)。

以防萬一,這裏是我使用插入數據的代碼:

mysql> LOAD DATA LOCAL INFILE 'C:\\.....genotypegene.csv' 
    -> INTO TABLE genotypegene 
    -> FIELDS TERMINATED BY ',' 
    -> (Genotype, Gene); 

感謝

+1

您是否試圖使用'INSERT'添加數據,而不是'LOAD DATA'?也許在字段之間有一些空格,當通過LOAD DATA插入時會包含這些空格。 – rMX 2011-12-21 10:39:57

+1

該錯誤告訴我們在'Gene'表中缺少父數據。你有沒有檢查過你試圖填充'genotypegene.Gene'列的所有數據是否存在於'Gene'表中?此外,您是否檢查過CSV值或'gene.Gene'列中的空格?還有值的情況(上,下等)。可能會絆倒你.. – 2011-12-21 10:44:57

+0

工作表示感謝 - 我沒有想到它,因爲完全相同的數據插入罰款之前,我添加了外鍵,但我想這是因爲它並不在意它有白色空間。 – Lisa 2011-12-21 10:51:48

回答

9

一種方法來找出是什麼原因造成這將是做到以下幾點:

禁用的外鍵

SET FOREIGN_KEY_CHECKS = 0; 

加載數據

爲此,使用您的命令:

mysql> LOAD DATA LOCAL INFILE 'C:\\.....genotypegene.csv' 
    -> INTO TABLE genotypegene 
    -> FIELDS TERMINATED BY ',' 
    -> (Genotype, Gene); 

找到孤數據

select gtg.* from genotypegene gtg 
where (gtg.Gene not in (select g.Gene from gene g) 
    or gtg.Genotype not in (select gt.Genotype from genotype gt)); 

這應該給你的那些行的列表,是造成你的FK約束違反。

修復孤立的數據

更新嗎?刪除它們?修復他們在CSV?將父行插入Gene表中?做任何適當的事情。

啓用FK檢查

SET FOREIGN_KEY_CHECKS = 1; 

如果不出意外這應該給你一個線索,爲什麼你所得到的FK約束違反錯誤。

祝你好運!

+0

感謝您的支持,事實證明它是我所有的行都是有問題的,但這對未來會很有用 – Lisa 2011-12-21 15:29:11

+0

+1這麼多人只是給出了設置FOREIGN_KEY_CHECKS = 0的解決方案,但獲取孤立數據非常好,看到上述內容。 – blo0p3r 2013-05-01 19:24:51