簡體   English   中英

MySQL錯誤1452 - 無法插入數據

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM