mysqlimport 和“重复条目”错误

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

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

相关内容