MySQL使用load data导入数据时报错: Cannot add or update a child row: a foreign key constraint fails

目录

问题来源

解决办法


问题来源

        初学MySQL,创建三个表department、employee以及project,其中问题主要出现在employee表中,该表定义如下:

CREATE TABLE employee
(
  id      INT(10) PRIMARY KEY,
  name    CHAR(20),
  age     INT(10),
  salary  INT(10) NOT NULL,
  phone   INT(12) NOT NULL,
  in_dpt  CHAR(20) NOT NULL,
  UNIQUE  (phone),
  CONSTRAINT emp_fk FOREIGN KEY (in_dpt) REFERENCES department(dpt_name)
 );

     表中现有数据如下:

MySQL使用load data导入数据时报错: Cannot add or update a child row: a foreign key constraint fails

        现在我想通过load data从文件中导入数据到employee表中,数据源(文件名为“123”)、导入报错情况如下:

MySQL使用load data导入数据时报错: Cannot add or update a child row: a foreign key constraint failsMySQL使用load data导入数据时报错: Cannot add or update a child row: a foreign key constraint fails

解决办法

       报错信息表明这是一个外键约束错误,并指明了错误发生的位置应当在数据源的dpt2处,也就是说,引起错误的可能原因是外键所引用的源表中并没有’dpt2‘,考虑到这种情况,我再次检查employee中in_dpt字段所绑定的外键原表department中的dpt_name字段,如下:

MySQL使用load data导入数据时报错: Cannot add or update a child row: a foreign key constraint fails

        结果显示,department表中的dpt_name字段中是存在'dpt2'的,因此按道理来说不存在外键约束错误的情况,但是却报出了外键约束错误,这就说明数据库读入时读入的肯定不是dpt2,而我在数据源中是以空格为分隔符进行字段区分的,因此有可能是因为load data导入时不是以空格符为分隔符的。然后我将空格符换为了制表符,即Tab,用Tab来分割各个字段,就成功的解决了问题。

        因此,在使用load data导入数据文件时,数据文件中字段数据间应该以Tab制表符为分隔符,而不应当用空格符。