如何将 csv 文件导入 mysql 表并自动递增

Posted

技术标签:

【中文标题】如何将 csv 文件导入 mysql 表并自动递增【英文标题】:How to import a csv file into a mysql table and auto increment 【发布时间】:2017-12-24 07:45:07 【问题描述】:

我正在尝试使用以下命令将 csv 文件导入 mysql

mysqlimport --columns=name,amount,desc --ignore-lines=1 --fields-terminated-by=, --verbose --local -u muser -p mydb file.csv

文件包含字段但不包含主键。它看起来像这样:

name, amount, desc

我的mysql表是这样的:

CREATE TABLE `organization` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(128) DEFAULT NULL,
  `amount` varchar(128) DEFAULT NULL,
  `desc` varchar(128) DEFAULT NULL,

如何使用mysqlimport 来导入 csv 文件并生成自动递增的 ID?

当我运行它时,我收到以下错误:

mysqlimport:错误:1467,无法读取自增值 存储引擎,使用表时:组织

【问题讨论】:

【参考方案1】:

对于那些使用 phpmyadmin UI 导入和/或您的表可能有大量列并且您不想通过冗长乏味的 sql 语句导入的用户,请执行以下操作;

    使用任何电子表格编辑器(如 microsoft excel)在 ID 列所在的位置添加一个空白列。

    如果您收到“Incorrect integer value: '' for column 'id' at row 1”错误,请使用 0 填写您创建的空白 id,它们将在插入时自动递增。

注意当使用电子表格编辑器编辑 csv 文件时,只需交叉检查所有列,尤其是日期或货币列是否未按照编辑器的默认格式设置,这可能与您的原始格式不同。

【讨论】:

感谢您让我免于编写脚本!不敢相信我还不知道这个! :P【参考方案2】:

使用前导空字段扩展您的 csv:

id,name,amount,desc
,john,10,xz
,paul,20,ac

【讨论】:

可以,但我有数百万行,无法修改 csv。 但这不是您提供的信息,也没有理由对给定问题的适当解决方案投反对票。对于其他人来说,这可能是一个有用的快速解决方案......仅投票不符合您的个人(并且未传达)需求是不公平的。 您可以在 microsoft excel 上通过单击几下编辑 csv 您可以为所有条目添加一个空白列【参考方案3】:

使用--columns parameter 指定字段的映射。列名的顺序表示如何将数据文件列与表列匹配。

mysqlimport --columns=name,amount,desc...

【讨论】:

以上是关于如何将 csv 文件导入 mysql 表并自动递增的主要内容,如果未能解决你的问题,请参考以下文章

将多个 csv 文件中的数据导入一个 Excel 工作表并计算平均值

几个CSV大文件如何导入mysql数据库,并更新替换对应数据?

在 ORacle 10g 中导入 MySql 生成的 csv 大文件

如何让mysql从前一行值开始自动递增

如何将csv导入mysql和mysql导出csv

如何把csv文件批量导入到mysql数据库