SQL может вставляться отдельно, но не может загружаться как файл с внешним ключом

#mysql #sql #database #relational-database

#mysql #sql #База данных #реляционная база данных

Вопрос:

Я новичок в базе данных, следую инструкциям и провожу эксперименты. Итак, мои извинения, если этот вопрос оказался глупым.

Я настроил такую таблицу:

 CREATE TABLE if not exists SAMPLE(
    chara   varchar(15) not null,
    Num     char(9),
    secNum char(9),
    primary key (Num),
    foreign key (secNum) references sample(Num)
) engine=innodb;
  

Если я вставляю записи одну за другой:

 insert into SAMPLE(chara, Num) values ("A", "111");
insert into SAMPLE(chara, Num, secNum) values ("B", "222", "111");
insert into SAMPLE(chara, Num) values ("C", "333");
  

Это работает нормально. Но если я загружу следующие данные с load data infile ".../SAMPLE.txt" into table SAMPLE; :

 A   111 N
B   222 111
C   333 N
  

Я получил сообщение об ошибке:

 Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`company`.`sample`, CONSTRAINT `sample_ibfk_1` FOREIGN KEY (`secNum`) REFERENCES `sample` (`Num`))  0.000 sec
  

Я мог бы предположить, что это как-то связано с нарушением ссылочной целостности, но я не знаю, что. И я также не знаю, почему он работает с сервальными вставками, но не с загрузкой. Может ли кто-нибудь помочь мне понять, что пошло не так, и как я могу избавиться от этого? Спасибо.

Ответ №1:

когда вы отдельно вставляете строки одну за другой, для второй вставки уже отображается строка 111, и это не нарушает FK, но когда вы загружаете файл, он пытается вставить все строки в один пакет (транзакцию), поэтому строка 111 пока не существует.