过去,我经常使用 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
答案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;"