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 Server: 5.5.8

1 ответ

Решение

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

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

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;"
Другие вопросы по тегам