三种重定向介绍
select ... into
使得mysql查询结果能存储在变量或者文件中:
-
select ... into var_list
使得查询结果存储在一个变量列表中 -
select ... into outfile
使得查询结果存储在一个文件中,同时可以指定列和行的终止符 -
select ... into dumpfile
使得单行结果写入文件并不附带任何格式化
测试数据建立
create table t(nValue int, Str varchar(100), bStr blob);
insert into t(nValue, Str, bStr) values(1, "szn", 0x1234), (2, "slz", 0xFFAA), (3, null, null);
输出重定向到变量
输出重定向到变量时,变量的个数必须匹配select
列的个数,并且查询结果必须有且只有一行(查询结果为空时,会触发代号为1329的warning
。查询结果为多行时,会触发代号为1172的error
)。
select nValue, Str, bStr into @x, @y, @z from t limit 1;
select @x, @y, @z, hex(@z);
@x | @y | @z | hex(@z) |
---|---|---|---|
1 | szn | �4 | 1234 |
输出重定向到文件(outfile)
- 输出重定向到文件时,这个文件是创建在server端的
- 重定向的输出文件在指定的路径上必须不存在
- my.ini文件中的
secure_file_priv
会影响导出路径的选择
select * from t into outfile 'd:/1.txt';
--上述查询结果:[Err] 1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
--上述语句执行失败原因及解决方案下文将进行解释
select * from t into outfile 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\1.txt';
--生成的文件内容(16进制显示):31 09 73 7A 6E 09 12 34 0A 32 09 73 6C 7A 09 FF AA 0A 33 09 5C 4E 09 5C 4E 0A
重定向路径
在之前查询时,之所以第一次失败而第二次成功的原因是my.ini
中指定了secure-file-priv="C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\"
,这就导致了重定向的路径前缀必须是指定的值。可以修改此变量的值secure-file-priv=""
并重启mysql服务,再次执行即可成功:
select * from t into outfile 'd:/1.txt';
--受影响的行: 3
show variables like 'secure_file_priv';
--上述语句可用于查看my.ini中secure_file_priv的设定值
终止符设定
列终止符设定:fields TERMINATED by
行终止符设定:lines TERMINATED by
select * from t into outfile 'd:/1.txt' fields TERMINATED by ',' lines TERMINATED by '\r\n';
--输出文件内容(16进制显示):31 2C 73 7A 6E 2C 12 34 0D 0A 32 2C 73 6C 7A 2C FF AA 0D 0A 33 2C 5C 4E 2C 5C 4E 0D 0A
输出重定向到文件(dumpfile)
select * from t limit 1 into DUMPFILE 'd:/1.txt';
--输出文件内容(16进制显示):31 73 7A 6E 12 34
select * from t limit 1, 1 into DUMPFILE 'd:/1.txt';
--输出文件内容(16进制显示):32 73 6C 7A FF AA
select * from t limit 2, 1 into DUMPFILE 'd:/1.txt';
--输出文件内容(16进制显示):33 00 00
参考资料:
网友评论