【发布时间】:2012-01-25 04:23:16
【问题描述】:
我正在向以下 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;
我先将数据插入到 genotype/gene 中,但尝试插入到 genotypegene 时出现以下错误:
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`))
我要插入到此表中的数据是: 基因型1,基因1 基因型1,基因2 基因型1,基因3 基因型1,基因4
基因型表中有一个Genotype1的副本,想法是每个基因型可以包含多个基因,但每个基因可以存在多个基因型(目前只有1个基因型,但稍后我会插入更多)。我读到here 说我可以关闭外键检查,但我不愿意在不知道此错误原因的情况下这样做。这是因为基因型表中只有一个 Genotype1 副本吗? (我检查了 Genotype1、Gene1 等在其主键表中的格式/拼写相同)。
以防万一,这里是我用来插入数据的代码:
mysql> LOAD DATA LOCAL INFILE 'C:\\.....genotypegene.csv'
-> INTO TABLE genotypegene
-> FIELDS TERMINATED BY ','
-> (Genotype, Gene);
谢谢
【问题讨论】:
-
您是否尝试使用“INSERT”而不是“LOAD DATA”添加数据?可能字段之间有一些空格,通过 LOAD DATA 插入时会包含这些空格。
-
错误告诉我们
Gene表中缺少父数据。您是否检查过您尝试填充genotypegene.Gene列的所有数据是否存在于Gene表中?此外,您是否检查了 CSV 值或gene.Gene列中的空白?值的情况(上、下等)也是如此。可能也会绊倒你.. -
这行得通,谢谢-我没有想到,因为在我添加外键之前,完全相同的数据插入得很好,但我想那是因为它不在乎它有空格.
-
如何从 CSV 文件中删除空格(手动编辑 - 似乎没有)。它可以很好地手动插入,这对于我目前拥有的少量数据来说很好,但最终我需要使用 LOAD DATA 插入
-
@Lisa 如果您的值中没有空格,您可以在任何文本编辑器中轻松替换 ''(空白)上的 ''(无),直到没有任何空白。如果值中有wahitespaces,最好使用RegExp,例如,您可以使用
sed:sed -e 's/ *, */,/g < infile > outfile'
标签: mysql foreign-keys mysql-error-1452