MySQL错误1452不能插入数据
问题描述:
我插入一些数据分为以下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);
感谢
答
一种方法来找出是什么原因造成这将是做到以下几点:
禁用的外键
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约束违反错误。
祝你好运!
您是否试图使用'INSERT'添加数据,而不是'LOAD DATA'?也许在字段之间有一些空格,当通过LOAD DATA插入时会包含这些空格。 – rMX 2011-12-21 10:39:57
该错误告诉我们在'Gene'表中缺少父数据。你有没有检查过你试图填充'genotypegene.Gene'列的所有数据是否存在于'Gene'表中?此外,您是否检查过CSV值或'gene.Gene'列中的空格?还有值的情况(上,下等)。可能会绊倒你.. – 2011-12-21 10:44:57
工作表示感谢 - 我没有想到它,因为完全相同的数据插入罚款之前,我添加了外键,但我想这是因为它并不在意它有白色空间。 – Lisa 2011-12-21 10:51:48