csv批量导入mysql命令

Posted 马会东的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csv批量导入mysql命令相关的知识,希望对你有一定的参考价值。

今天把从Kaggle上下载下来的csv数据导入mysql,想做个统计分析,怎奈csv文件有些大。所以仅仅能用mysql 命令导入,现mark下,以备以后不时之需:

1. 导入:

基本的语法:
load data [low_priority] [local] infile ‘file_name txt‘ [replace | ignore]
into table tbl_name
[character set gbk]
[fields
[terminated by‘t‘]
[OPTIONALLY] enclosed by ‘‘]
[escaped by‘‘ ]]
[lines terminated by‘n‘]
[ignore number lines]
[(col_name, )]

导入命令_example:

load data infile ‘csv文件路径\test.csv‘ 
replace into table 表名              
fields terminated by ‘,‘ 
optionally enclosed by ‘"‘ 
lines terminated by ‘
‘ 
ignore 1 lines(Id,@dummy,DayOfWeek,PdDistrict,Address,X,Y);

不要小看这个简单的example。包括了非常多东西;

第一行就是导入文件;

第二行參看语法就会发现有两个词:replace 和 ignore 。replaceignore关键词控制对现有的唯一键记录的反复的处理。假设你指定replace。新行将取代有同样的唯一键值的现有行。假设你指定ignore。跳过有唯一键的现有行的反复行的输入。假设你不指定不论什么一个选项,当找到反复键时,出现一个错误,而且文本文件的余下部分被忽略。


所以我认为现实情况下你的表设计主键。还是最好要不会反复的字段;

第三~四行非常easy就是每一个详细字段内容之间是以逗号隔开的,那就以逗号分开。
erminated by描写叙述字段的分隔符。默认情况下是tab字符( )
enclosed by描写叙述的是字段的括起字符。就是说字段中假设有引號。就当做是字段的一部分。
语法中另一个是 escaped by, 它描写叙述的是转义字符。

默认的是反斜杠(backslash: )

第五行 lines terminated by是对每行进行切割。这里要注意一个问题。假设csv文件是在windows下生成,那切割用 ‘ ’。linux下用 ‘ ’。

第六行中 ignore 1 lines 是忽略第一行。由于第一行往往是字段名。后边括号里有个字段非常特别 @dummy,它是说假设csv文件里有个字段我不想插进去。那就把相应字段名变成@dummy。

PS:想顺便插入导入时间。就在最后加上set update_time=current_timestamp。

2. 导出:

同一时候附带上导出命令:

select * from 表名
into outfile ‘导出路径\test.csv‘ 
fields terminated by ‘,‘ 
optionally enclosed by ‘"‘ 
escaped by ‘"‘ 
lines terminated by ‘
‘; 

希望多多交流!

以上是关于csv批量导入mysql命令的主要内容,如果未能解决你的问题,请参考以下文章

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

php分批导入csv到mysql_php实现批量上传数据到数据库(.csv格式)的案例

MySQL 如何批量导入含有大量html的Csv,csv是一个产品表,包含1000条产品,每

MYSQL怎么批量导入多个excel文件,字段都是对应的

Neo4j批量导入大量csv数据

Oracle 批量插入数据怎么做