#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 пока не существует.