如何将 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数据库,并更新替换对应数据?