[英]MySQL Error 1452 - can't insert data
我将一些数据插入以下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,Gene1 Genotype1,Gene2 Genotype1,Gene3 Genotype1,Gene4
在基因型表中有一个基因型1的副本,其思想是每个基因型可以包含许多基因,但每个基因可以存在多种基因型(目前,只有1种基因型,但后来我会插入更多基因型)。 我在这里读到我可以关闭外键检查,但我不愿意在不知道这个错误的原因的情况下这样做。 这是因为基因型表中只有一个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约束违规错误。
祝好运!
当字段之间的分隔符与字段具有的某个值一致时,有时会出现此错误。 示例:如果分隔符是逗号(,)。 可能有些字段有这个逗号,并认为这是一个字段变化。 检查这些情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.