注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

曾国藩的博客

 
 
 

日志

 
 

ubuntu 12.04 mysql load data infile错误  

2013-03-05 10:06:15|  分类: SQL/Oracle/Mysql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
http://ningyubuaa.sinaapp.com/2012/10/21/mysql-load-data-infile%E9%94%99%E8%AF%AF/

1. load data infile

今天使用load data infile 命令向mysql中批量插入数据时,遇到了如下错误:

1
2
mysql> load data local infile '~/student.txt' into table student;
ERROR 1148 (42000): The used command is not allowed with this MySQL version

然后,我又尝试去掉local,如下:

1
2
mysql> load data  infile '/home/jwill/student.txt' into table student;
ERROR 29 (HY000): File '/home/jwill/student.txt' not found (Errcode: 13)

查阅了一些资料后,如下解决:
在登录时指定–local-infile=1

1
mysql -uroot -p --local-infile=1

然后,输入如下命令:

1
2
mysql> load data local infile '/home/jwill/student.txt' into table student
fields terminated by ',';

这样,问题就解决了。

student.txt的内容如下:

1
2
3
4
5
6
2,jack,男,23,数学学院,北京,234
3,jim,男,23,数学学院,北京,2345
4,mike,男,23,数学学院,北京,234
5,lucy,女,23,数学学院,北京,234
6,lily,女,23,数学学院,北京,234
7,briane,女,23,数学学院,北京,234

查询结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
mysql> select * from student;
+-----+--------+------+------+--------------+----------+------+
| sno | sname  | ssex | sage | sdept        | saddress | stel |
+-----+--------+------+------+--------------+----------+------+
|   2 | jack   | 男   |   23 | 数学学院     | 北京     | 234  |
|   3 | jim    | 男   |   23 | 数学学院     | 北京     | 2345 |
|   4 | mike   | 男   |   23 | 数学学院     | 北京     | 234  |
|   5 | lucy   | 女   |   23 | 数学学院     | 北京     | 234  |
|   6 | lily   | 女   |   23 | 数学学院     | 北京     | 234  |
|   7 | briane | 女   |   23 | 数学学院     | 北京     | 234  |
+-----+--------+------+------+--------------+----------+------+
6 rows in set (0.00 sec)

注意,student.txt的每条记录的字段之间用”,”分隔,对应与命令中的”fields terminated by ‘,’,因为load data infile命令中的字段默认分割符为”\t”,所以不指定的话插入的数据是错误的。

下面是mysql5.5中文参考手册上关于load data infile的解释:

如果指定了LOCAL,则被认为与连接的客户端有关:
· 如果指定了LOCAL,则文件会被客户主机上的客户端读取,并被发送到服务器。文件会被给予一个完整的路径名称,以指定确切的位置。如果给定的是一个相对的路径名称,则此名称会被理解为相对于启动客户端时所在的目录。
· 如果LOCAL没有被指定,则文件必须位于服务器主机上,并且被服务器直接读取。
当在服务器主机上为文件定位时,服务器使用以下规则:
· 如果给定了一个绝对的路径名称,则服务器使用此路径名称。
· 如果给定了带有一个或多个引导组件的相对路径名称,则服务器会搜索相对于服务器数据目录的文件。
· 如果给定了一个不带引导组件的文件名称,则服务器会在默认数据库的数据库目录中寻找文件。
注意,这些规则意味着名为./myfile.txt的文件会从服务器数据目录中被读取,而名为myfile.txt的同样的文件会从默认数据库的数据库目 录中读取。例如,下面的LOAD DATA语句会从db1数据库目录中读取文件data.txt,因为db1是当前数据库。即使语句明确把文件载入到db2数据库中的表里,也会从db1目 录中读取。
mysql> USE db1;
mysql> LOAD DATA INFILE ‘data.txt’ INTO TABLE db2.my_table;
注意,使用正斜杠指定Windows路径名称,而不是使用反斜杠。如果您使用反斜杠,您必须使用两个。出于安全原因,当读取位于服务器中的文本文件时,文 件必须位于数据库目录中,或者是全体可读的。另外,要对服务器文件使用LOAD DATA INFILE,您必须拥有FILE权限

参考:http://www.justwinit.cn/post/4279/

  评论这张
 
阅读(834)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018