mysql load data infile的使用

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 20:28 点击:

 

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'

   [REPLACE | IGNORE]

  INTO TABLE tbl_name

   [FIELDS

    [TERMINATED BY 'string']

   [[OPTIONALLY] ENCLOSED BY 'char']

   [ESCAPED BY 'char' ]

 ]

   [LINES

   [STARTING BY 'string']

  [TERMINATED BY 'string']

  ]

   [IGNORE number LINES]

  [(col_name_or_user_var,...)]

   [SET col_name = expr,...]]

LOAD DATA INFILE 语句以很高的速度从一个文本文件中读取行到一个表中。文件名必须是一个文字字符串。

关于INSERT 与LOAD DATA INFILE 的效率和提高LOAD DATA INFILE 速度的更多信息,参考管理员手册中的加速INSERT 语句 。

系统变量character_set_database 所指出的字符集被用来解释文件中的信息。SET NAMES 和设置character_set_client 不会影响输入的解释。

用户也可以使用import 实用程序装载数据文件;它通过发送一个LOAD DATA INFILE 命令到服务器来实现。--local 选项使得import 从客户端主机读取数据文件。如果客户端与服务器支持压缩协议,用户可以指定--compress 选项,以在较慢的网络中获得更好的性能。参考管理员手册中的import — 数据导入程序 。

如果用户指定关键词LOW_PRIORITY,LOAD DATA 语句的执行将会被延迟,直到没有其它的客户端正在读取表。

如果一个GSSYS 表满足同时插入的条件(即该表在中间有空闲块),并且您对这个GSSYS 表指定了CONCURRENT,则当LOAD DATA 正在执行时,其它线程会从表中重新获取数据。即使没有其它线程在同时使用本表格,使用本选项也会略微影响LOAD DATA 的性能。

如果指定了LOCAL 关键字,它将对连接的客户端做出解释:

•     如果指定了LOCAL,客户端主机上的客户端组件读取文件并发送到服务器。可以给出文件的完整路径以确定其精确位置。如果给出的是相对路径,则文件名是相对于客户端组件启动时所在的目录。

•     如果没有指定LOCAL,文件是位于服务器的主机上,并且直接被服务器读取。

当从服务器主机定位文件时,服务器使用下列规则:

•     如果给定完整的路径,服务器使用该路径名。

•     如果给定一个或多个前置构件的相对路径,服务器以相对服务器的数据目录搜索文件。

•     如果给定没有前置构件的文件名,服务器从当前数据库的数据库目录搜寻文件。

  注意:

 

 这些规则意味着,一个以'/gsfile.txt' 给出的文件是从服务器的数据目录中读取的,然而,以`gsfile.txt' 给出的一个文件是从当前数据库的数据目录下读取的。举例来说,下面的LOAD DATA 语句从db1 数据库目录下读取文件'data.txt',因为db1 是当前数据库,即使语句明确把文件载入到db2数据库中的表里,也会从db1 目录中读取:

 

sqlcli> USE db1;

sqlcli> LOAD DATA INFILE 'data.txt' INTO TABLE db2.gs_table;

 

  注意:

 

指定Windows 路径名时,使用的是斜线而不是反斜线。如果要用反斜线,必须双写。

出于安全的原因,当读取位于服务器上的文本文件时,文件必须位于数据库目录下或者可以被所有用户读取。也就是说,当对服务器上的文件执行LOAD DATA INFILE 时,用户必须获得FILE 权限。

参考管理员手册中的GBase 提供的权限 。

与服务器直接访问文件相比,使用LOCAL 速度稍微慢些,这是因为文件的内容必须通过客户端到服务器的连接传送。另一方面,对于本地文件,不需要获得FILE 权限。

只有服务器和客户端都允许时,LOCAL 才可以工作。例如,如果kernel 启动时,--local-infile=0,则LOCAL 不能工作。参考管理员手册中的LOAD DATA LOCAL 的安全问题 。

REPLACE 和IGNORE 关键字处理那些与已存在的主键值重复的输入记录。

如果指定了REPLACE,输入行将会代替已存在的行(也就是说,主索引值相同的行将作为存在的行)。参考REPLACE 语法 。

如果指定了IGNORE,与已存在行主键值重复的输入行将被跳过。如果不指定二者中的任一个,则操作行为将依赖是否指定了LOCAL 关键字。没有指定LOCAL,则如果发现有重复的键值,将产生一个错误,并忽略文本文件的其余部分。如果指定了LOCAL,则缺省的操作行为将与指定了IGNORE 的相同;这是因为,在

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • mysql-mmm
      • mysqldump命令——MySQL数据库备份还原
      • Oracle数据导入MySQL的快捷工具:MySQL Migration Toolkit
      • 简简单单储存过程——循环一个select结果集
      • MySQL数据库十大优化技巧
      • Mysql安装笔记
      • Mysql主主复制架构配置
      • Mysql的Procedure 参数为NULL问题分析
      • MySQL Stmt预处理提高效率问题的小研究
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1