В прошлом я много использовал 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;"