SELECT INTO OUTFILE和LOAD DATA INFILE筛选表记录备份与还原

LOAD DATA INFILE是SELECT ... INTO OUTFILE的逆操作,SELECT句法。为了将一个数据库的数据写入一个文件,使用SELECT ... INTO OUTFILE,为了将文件读回数据库,使用LOAD DATA INFILE。

select语法结构比较复杂,这里只讲述复制表,使用SELECT * INTO OUTFILE 'file_name' FROM tbl_name [where 条件]。

load data语法:

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 'file_name' INTO TABLE tbl_name。

覆盖主键相同的数据,使用:LOAD DATA INFILE 'file_name' INTO REPLACE TABLE tbl_name。

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

如果你指定关键词LOW_PRIORITY,LOAD DATA语句的执行被推迟到没有其他客户读取表后。

当在服务器主机上寻找文件时,服务器使用下列规则:

如果给出一个绝对路径名,服务器使用该路径名。
如果给出一个有一个或多个前置部件的相对路径名,服务器相对服务器的数据目录搜索文件。
如果给出一个没有前置部件的一个文件名,服务器在当前数据库的数据库目录寻找文件。
注意这些规则意味着一个像“./myfile.txt”给出的文件是从服务器的数据目录读取,而作为“myfile.txt”给出的一个文件是从当前数据库的数据库目录下读取。也要注意,对于下列哪些语句,对db1文件从数据库目录读取,而不是db2:

mysql> USE db1;
mysql> LOAD DATA INFILE "./data.txt" INTO TABLE db2.my_table;

REPLACE和IGNORE关键词控制对现有的唯一键记录的重复的处理。如果你指定REPLACE,新行将代替有相同的唯一键值的现有行。如果你指定 IGNORE,跳过有唯一键的现有行的重复行的输入。如果你不指定任何一个选项,当找到重复键键时,出现一个错误,并且文本文件的余下部分被忽略时。

例如:我要导出phpwind数据库pw_members表下uid>2 and uid<=300的会员数据,然后导入到另一数据库

导出数据语句:
select username,password into outfile "e:\\temp\\new.sql" from pw_members where uid>1 and uid<=300;

导入数据语句:
load data infile "e:\\temp\\new.sql" into table phpwind(username,password)

 

 

制作人:飞虎                                           无兄弟不编程!

====================================================

 

欢迎加QQ群进行更多交流:305397511     专注于php、mysql以及开源框架

 

posted @ 2011-08-31 16:43  飞虎cnblog  阅读(1468)  评论(0编辑  收藏  举报
友情链接:技术迷 | JSM官方博客 | 阿旭博客 | 有声小说在线听