Home  >  Article  >  Database  >  mysql load data infile 命令的数据导入

mysql load data infile 命令的数据导入

WBOY
WBOYOriginal
2016-06-07 17:52:231337browse

文章介绍了mysql load data infile 命令的数据导入,该方式比直接的insert的效率要高,按照官方的说法是要比insert语句快上20倍,有需要的朋友可参考。

使用方式如下:

 代码如下 复制代码

mysql>load data local infile "D:/ab.txt" into table mytbl(name,age); 

如何load数据里面带反斜杠(backslash)”” 的数据


由于如果你没有指定FIELDS子句,则默认值为假设您写下如下语句时的值:

 代码如下 复制代码
FIELDS TERMINATED BY ‘t’ ENCLOSED BY ” ESCAPED BY ‘\’

所以,如果你的数据里面有反斜杠(backslash)””的时候,数据会出现被截断的问题。出现这种问题,只要写上如下的fields子句即可

 代码如下 复制代码
FIELDS TERMINATED BY ‘t’ ENCLOSED BY ” ESCAPED BY ”


使用上述的命令就可以将D:/ab.txt文件的内容导入到表mytbl中,其中name和age是表mytbl的字段,对应ab.txt文件中每行的数据。如果编译安装mysql时没有指定–enable-local-infile,那么在使用上述命令时会报如下错误:

ERROR 1148 (42000): The used command is not allowed with this MySQL version    

 解决方式有两种,一是重新编译安装加上上面的参数,而是直接用命令行执行,如下:

 代码如下 复制代码

mysql -uroot -proot  mydb_name --local-infile=1 -e 'load data local infile "D:/ab.txt" into table mytbl(name,age)'    


测试了一把,导入300万条数据时,使用load data命令的时间花销大概在3分钟左右


如何load的时候只insert特定的列
比如表里面有比元数据多的列。可以在load的时候指定要插入的字段名字。

示例的代码如下:

 代码如下 复制代码

LOAD DATA INFILE '~/data.txt'  
INTO TABLE fb0505  
CHARACTER SET  gbk  
FIELDS TERMINATED BY 't' ENCLOSED BY '' ESCAPED BY ''
LINES TERMINATED BY 'n' STARTING BY '' 
(seller_id,fb_type,fb_date,item_url);

其中表fb0505里面还有一列是id。


建的表用的是MYISAM,调整了几个session的参数值

 代码如下 复制代码

SET SESSION BULK_INSERT_BUFFER_SIZE=256217728;
SET SESSION MYISAM_SORT_BUFFER_SIZE=256217728;

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn