`

MySQL Load data infile

阅读更多

LOAD DATA INFILE语句从一个文本文件中以很高的速度读入一个表中。如果指定LOCAL关键词,从客户主机读文件。如果LOCAL没指定,文件必须位于服务器上。(LOCAL在MySQL3.22.6或以后版本中可用。)

为了安全原因,当读取位于服务器上的文本文件时,文件必须处于数据库目录或可被所有人读取。另外,为了对服务器上文件使用LOAD DATA INFILE,在服务器主机上你必须有file的权限。

头一回用load data infile,以为只是把插入语句写到一个文件里,然后用load data infile把文件传入数据库就OK了,于是生成了一个内容类似同n句 insert into table_name (`id`,`name`,`content`) values (1,"a","abc"),(2,"b","abc"),(3,"c","abc");组成的.sql文件。然后在PHP中执行 LOAD DATA  INFILE 'file_name.sql' INTO TABLE table_name;发现总是执行出错,真晕,不知道怎么回事,只好去再详细地读一下mysql的应用手册:



如果你指定一个FIELDS子句,它的每一个子句(TERMINATED BY, [OPTIONALLY] ENCLOSED BY和ESCAPED BY)也是可选的,除了你必须至少指定他们之一。

如果你不指定一个FIELDS子句,缺省值与如果你这样写的相同:

FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'

如果你不指定一个LINES子句,缺省值与如果你这样写的相同:

LINES TERMINATED BY '\n'
换句话说,缺省值导致读取输入时,LOAD DATA INFILE表现如下:

在换行符处寻找行边界
在定位符处将行分进字段
不要期望字段由任何引号字符封装
将由“\”开头的定位符、换行符或“\”解释是字段值的部分字面字符

才知道原来我的sql里的内容并不是按照 load data infile的缺省设置来写的, 例如缺省设置下,每一句插入语句里的字段是由制表符隔开且内容不以任何引号封装(也就是括起来)的,但我的是由逗号隔开且有双引号括起来的,难怪会执行出错。

于是,将sql执行语句写成mysql_query('load data local infile "file_name.sql" into table `table_name` FIELDS TERMINATED BY "," ENCLOSED BY \'"\' ESCAPED BY "\\\" LINES TERMINATED BY "\n" STARTING BY ""');

这会算是执行成功了,成功地往指定的数据表里插入了很多条记录,可是又发现了一个问题,插入的数据乱七八糟的,字段与要插入的内容不符合我的要求,而且有好多是把字段名给插入到字段里面去了,唉,只好再回头去又读了一遍mysql中的load data infile用法,终于搞明白了,原来file_name.sql里面只需要按一定格式把内容写进去就行了,不是把整个sql执行语句都写进去的,真笨!^_^

于是,把内容换成了

1,"a","abc"

2,"b","abc"

3,"c","abc"

而且内容要与数据表里的字段从数量上和顺序上都要严格对应

在本地服务器(我用的是WINDOW主机)上测试了一下,OK,操作成功!

然后把程序传到网络服务器上(LINUX主机),一执行,提示:

Can't get stat of ……'' (Errcode: 13)

开始还以为是sql文件权限或者是mysql的root用户权限的问题,后来想不对呀,mysql的root用户是超级用户,肯定有权限的,那问题就出在sql文件的权限上,后来把sql的权限改成777,执行操作后还是不行。

网上搜索了一下,有说把文件放在/var/lib/mysql里就行了,一试,果真可以,可是我又不可能在PHP网页中把sql文件生成放到/var/lib/mysql下,费尽了心思,最后终于在网上搜索到一个解决办法:




使用LOCAL将比让服务器直接存取文件慢些,因为文件的内容必须从客户主机传送到服务器主机。在另一方面,你不需要file权限装载本地文件。

你也可以使用mysqlimport实用程序装载数据文件;它由发送一个LOAD DATA INFILE命令到服务器来运作。 --local选项使得mysqlimport从客户主机上读取数据。如果客户和服务器支持压缩协议,你能指定--compress在较慢的网络上获得更好的性能。


其实办法简单得很,那就是把load data infile写成load data local infile 就OK啦。


文章出处:DIY部落(http://www.diybl.com/course/1_web/javascript/jsjs/20090519/167411.html)

分享到:
评论

相关推荐

    mysql load data infile 的用法.docx

    mysql load data infile 的用法.docx

    mysql Load Data InFile 的用法

    Load Data InFile是用于批量向数据表中导入记录。

    mysql load data infile 的用法(40w数据 用了3-5秒导进mysql)

    测试数据的时候,生成txt文件应该快点,再用这种方式导入到mysql 速度上快点。40w数据 用了3-5秒导进mysql,牛逼毁了

    MySQL中由load data语句引起死锁的解决案例

    一个线上项目报的死锁,简要说明一下产生原因、处理方案和相关的一些点. 1、背景 ...Load data infile ‘data1.csv' into table tb; Load data infile ‘data2.csv' into table tb; cat Data1.csv

    mysql 的load data infile

    LOAD DATA INFILE语句从一个文本文件中以很高的速度读入一个表中。如果指定LOCAL关键词,从客户主机读文件。如果LOCAL没指定,文件必须位于服务器上。(LOCAL在MySQL3.22.6或以后版本中可用。) 为了安全原因,当读取...

    loadData批量导入以及压缩协议使用指南1

    Mysql压缩协议支持Mycat从1.4开始支持mysql的压缩协议,在查询返回大的结果集和load data大量数据的性能提升比较明显。客户端如果是mysql

    mysql遇到load data导入文件数据出现1290错误的解决方案

     执行 “load data infile 文本数据路径 into table tab_load_data” 弹出错误。 #load data (载入数据)语法,要载入数据如下: 1 张三 男 江西 1 2 李四 男 四川 2 3 王五 男 上海 1 4 赵六 女 湖北 3 5 ...

    Java利用MYSQL LOAD DATA LOCAL INFILE实现大批量导入数据到MySQL

    Mysql load data的使用,MySQL的LOAD DATAINFILE语句用于高速地从一个文本文件中读取行,并装入一个表中

    mysql中的Load data的使用方法

    测试把txt文件导入至mysql数据库中: table: txt文件:D:/data.txt (txt文件下载) ... 您可能感兴趣的文章:Java利用MYSQL LOAD DATA LOCAL INFILE实现大批量导入数据到MySQLMySQL中由load data语

    MySQL数据库迁移快速导出导入大量数据(外发).txt

    使用MySQL的SELECT INTO OUTFILE 、LOAD DATA INFILE快速导出导入数据 LOAD DATA INFILE语句从一个文本文件中以很高的速度读入一个表中。MySQL官方文档也说明了,该方法比一次性插入一条数据性能快20倍。

    mysql中Load Data记录换行问题的解决方法

    问题是这样的:表persons有两个字段: id和name文本文档persons.txt中内容(其中每行字段之间用tab分割):1 Bush2 Carter3 Bush在mysql命令行下使用 load data local infile “persons.txt” into table persons ...

    MySQL+数据导入导出+实用技巧

    本文介绍了MySQL数据库中数据的导入导出方法,包括使用SELECT INTO OUTFILE语句将数据导出到文件中,以及使用LOAD DATA INFILE语句将文件中的数据导入到数据库中。同时,还介绍了默认的导入导出格式,即分隔符为制表...

    MySQL中使用load data命令实现数据导入的方法

    代码如下:mysql>load data local infile “D:/ab.txt” into table mytbl(name,age); 使用上述的命令就可以将D:/ab.txt文件的内容导入到表mytbl中,其中name和age是表mytbl的字段,对应ab.txt文件中每行的数据。...

    mysql中的load命令使用方法

    当前有db.txt文件,内容是以空格分开的用户名,例如:xiaowang xiaoliu zhangsan 将该文件加载到数据表user中,使用命令即可: 代码如下: load data local infile “/home/beaver/db” into table user lines ...

    mysql LOAD语句批量录入数据

    语法:LOAD DATA [LOCAL] INFILE ‘file_name.txt’ [REPLACE | IGNORE] INTO TABLE tbl_name LOAD DATA INFILE语句从一个文本文件中以很高的速度读入一个表中。如果指定LOCAL关键词,从客户主机读文件。如果LOCAL没...

    [译] MySQL 最佳实践 —— 高效插入数据

    LOAD DATA INFILE 是一个专门为 MySQL 高度优化的语句,它直接将数据从 CSV / TSV 文件插入到表中。 有两种方法可以使用 LOAD DATA INFILE。你可以把数据文件拷贝到服务端数据目录(通常 /var/lib/mysql-

    MySQL查询语句大全集锦(经典珍藏).pdf

    SQL查询语句大全集锦 MYSQL查询语句大全集锦 ...mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE MYTABLE; 9:导入.sql 文件命令(例如 D:/mysql.sql) mysql>use database; mysql>source d:/mysql.sql;

Global site tag (gtag.js) - Google Analytics