Назад | Перейти на главную страницу

mysqlimport и ошибка «повторяющейся записи»

В прошлом я много использовал mysqlimport для таблиц MyISAM без каких-либо проблем. Но теперь я хочу импортировать данные в таблицу InnoDB и столкнулся со следующей проблемой: mysqlimport сообщает следующую ошибку и ничего не импортирует:

mysqlimport: Error: 1062, Duplicate entry '1' for key 'PRIMARY', when using table: ...

... и я не знаю, как исправить эту ошибку. Таблица, в которую я хочу импортировать данные, создана только что без каких-либо данных. Таблица выглядит следующим образом:

CREATE TABLE `member` (
    `member_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID of Member',
    ...
    PRIMARY KEY (`member_id`),
    ...
) ENGINE=InnoDB;

Данные, которые я хочу импортировать, включают member_id, который определен в таблице как auto_increment. Конечно, в csv-файле нет повторяющихся «member_id» - я это проверил трижды. Может ли это вызвать какие-либо ошибки при импорте в MySQL ... и если да: как я могу это решить?

Версия сервера MySQL: 5.5.8

Играя с этим все выходные, я пришел к выводу, что mysqlimport не для таблиц InnoDB:

Мне удалось воспроизвести проблему из моего вопроса с помощью простой таблицы с одним столбцом и одной строкой ... Я смог исправить это, отключив автоинкремент и повторно включив его после импорта. Однако я столкнулся с другими проблемами:

mysqlimport будет жаловаться на ограничения внешнего ключа и отклонять импорт таблиц, даже если все зависимые таблицы и строки доступны. Итак: mysqlimport не будет работать, но те же данные с оператором INSERT работали.

Решить эту проблему так же просто, как отказаться от mysqlimport. Использовать LOAD DATA INFILE заявление вместо:

mysql -u <user-name> -p<password> --host=<host> --port=<port> -e "\
    USE <database-name>; \
    SET FOREIGN_KEY_CHECKS = 0; \
    LOAD DATA INFILE '<csv-file-name>' \
    INTO TABLE <table-name> (<comma-separated-list-of-column-names>); \
    SET FOREIGN_KEY_CHECKS = 1;"