SELECT ... INTO Statement (输出重定向

2019-12-11  本文已影响0人  szn好色仙人

三种重定向介绍

select ... into使得mysql查询结果能存储在变量或者文件中:

测试数据建立

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)

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

参考资料:

https://dev.mysql.com/doc/refman/8.0/en/select-into.html

上一篇 下一篇

猜你喜欢

热点阅读