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以及开源框架