[英]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.