MySQL错误1452 - 无法插入数据

时间:2011-12-21 10:33:40

标签: mysql foreign-keys mysql-error-1452

我将一些数据插入以下MySQL表中:

CREATE TABLE genotype
(
Genotype VARCHAR(20),
Fitness FLOAT NULL,
Tally INT NULL,
PRIMARY KEY (Genotype)
)ENGINE=InnoDB;


CREATE TABLE gene
(
Gene VARCHAR(20),
E FLOAT NOT NULL,
Q2 FLOAT NOT NULL, 
PRIMARY KEY (Gene)
)ENGINE=InnoDB;

CREATE TABLE genotypegene
(
Genotype VARCHAR(20),
Gene VARCHAR(20),
FOREIGN KEY (Genotype) REFERENCES genotype(Genotype),
FOREIGN KEY (Gene) REFERENCES gene(Gene)
)ENGINE=InnoDB;

我首先将数据插入基因型/基因,但在尝试插入基因型基因时出现以下错误:

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

在基因型表中有一个基因型1的副本,其思想是每个基因型可以包含许多基因,但每个基因可以存在多种基因型(目前,只有1种基因型,但后来我会插入更多)。我读了here我可以关闭外键检查,但我不愿意在不知道这个错误的原因的情况下这样做。这是因为基因型表中只有一个Genotype1的副本吗? (我已检查Genotype1,Gene1等在其主键表中的格式/拼写相同)。

以防万一,这是我用来插入数据的代码:

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

由于

2 个答案:

答案 0 :(得分: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约束违规错误的线索。

祝你好运!

答案 1 :(得分:1)

当字段之间的分隔符与该字段具有的某个值重合时,有时会出现此错误。示例:如果分隔符是逗号(,)。可能某个字段有此逗号,并认为这是一个字段更改。检查这些情况。