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;"