2011-12-21 96 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