SELECT INTO OUTFILE语法
功能描述
select into outfile
用于将查询到的数据导出到文件。
注意事项
select into outfile
依赖SELECT语句IntoClause的相关功能。select into outfile
依赖COPY到文件时的用户权限要求以及输出文件名要求。select into outfile
依赖COPY到文件时可选参数功能。该功能仅在数据库兼容模式为MySQL时能够使用(即创建DB时DBCOMPATIBILITY='B'),在其他数据库兼容模式下不能使用该特性。
用户必须具有导出文件的写入权限。
如果使用了FIELDS子句,则最少要指定分隔符、包裹字符或转义字符中的一项,如果使用了LINES子句则最少要指定行起始字符或结束符中的一项。
语法格式
SELECT ... INTO OUTFILE 'file_name'
[CHARACTER SET charset_name]
[export_options]
export_options:
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']]
参数说明
file_name
自定义文件名。
FILEDS子句
在FIELDS子句中有三个亚子句:TERMINATED BY、 [OPTIONALLY] ENCLOSED BY和ESCAPED BY。如果指定了FIELDS子句,则这三个亚子句中至少要指定一个。
- TERMINATED BY:用来指定字段值之间的符号。例如:
TERMINATED BY ','
指定了逗号作为两个字段值之间的标志。 - ENCLOSED BY:用来指定包裹文件中字符值的符号。例如:
ENCLOSED BY ' " '
表示文件中字符值放在双引号之间,若加上关键字OPTIONALLY表示所有的值都放在双引号之间。 - ESCAPED BY:子句用来指定转义字符。例如:
ESCAPED BY '*'
将”*“指定为转义字符,取代\
,如空格将表示为*N
。
- TERMINATED BY:用来指定字段值之间的符号。例如:
LINES子句
在LINES子句中使用TERMINATED BY指定一行结束的标志,如
LINES TERMINATED BY '?'
表示一行以?
作为结束标志。charset_name
字符集名称。
示例
1、创建兼容MySQL的库db_mysql,并进入。
create database db_mysql dbcompatibility 'B';
\c db_mysql
2、修改参数secure_file_priv为空。
secure_file_priv参数用于指定输出文件的存放目录,如果该设置为非空目录名,则要写入的文件必须位于该目录中。取值范围如下所示:
- 如果为空,则变量无效。文件可写入操作数据库的用户可以访问的系统位置。
- 如果设置为目录名,则服务器会将导入和导出操作限制为仅处理该目录中的文件。其中目录必须已经存在的目录。
- 如果设置为NULLL(默认值),服务器将禁用select into file导出操作。
alter system set secure_file_priv='';
3、创建测试表并写入数据。
create table test(id1 int, id2 char(10), id3 text); insert into test values(1,'a','zhangsan'); insert into test values(2,'b','lisi'); insert into test values(3,'c','wangwu');
4、执行
select into outfile
语句直接导出。select * into outfile '/home/vastbase/test.txt' fields terminated by ',' optionally enclosed by '"' lines starting by '<<' terminated by '\r\n' from test;
5、退出数据库并查看文件。
\q cat /home/vastbase/test.txt
返回结果为:
<<1,"a ","zhangsan" <<2,"b ","lisi" <<3,"c ","wangwu"