MYSQL5.7 select … into 的语法

MYSQL5.7 select … into 的语法

select…into 的语法允许查寻结果存到一个变量或写到一个文件中:

  • SELECT … INTO var_list:选择列的值并把它们存到变量中去。
  • SELECT … INTO OUTFILE:将选定的列写到外部文件中。列和行的结束符可以指定。
  • SELECT … INTO DUMPFILE:交一行写到一个文件中,它不包含任何格式。

INTO子句不要用于嵌套的SELECT中,因为每一个SELECT必须返回它的结果到它的外层SELECT中。

INTO子句能命名一个包含一个或多个变量的变量列表,它能是一个用户定义的变量,一个存储过程,一个函数的参数或本地存储程序的本地变量。(在准备阶段的SELECT … INTO OUTFILE,只能使用用户定义变量;see Section 13.6.4.2, “Local Variable Scope and Resolution”.)

被选择的值被分配到变量中。变量的数量必须和列的数量相匹配。查询应该只返回一行记录。如果查询没有返回任何行,会返回一个错误代码为1329的警告(无数据),并且变量值保持不变。如果查询返回多行记录,会产生一个1172的错误(结果由多行组成)。如果产生多行记录可以,可以使用LIMIT 1去限制结果只为一行。

select building,room_number,capactity into @x, @y, @z from classroom limit 1

用户定的变量是大小写不敏感的。(See Section 9.4, “User-Defined Variables”. )

SELECT … INTO OUTFILE ‘file_name‘形式的SELECT语句将选择的行写到一个文件中。这个文件被创建在服务器主机上,所以使用这个语句的用户必须要有FILE权限才行。file_name不能是一个已经存在的文件,防止那些存在的文件被销毁。character-set-filesystem系统变量控制着文件名的解释。

SELECT … INTO OUTFILE语句主要用于快速的dump一个表到服务器上的一个文本文件中。如果你想将结果文件创建到其它服务器上,而不是 本地服务器,那么不能使用SELECT … INTO OUTFILE语句,因为它没有办法写到一个相对的服务器路径上。

但是如果远程服务器安装了MYSQL 客户端 ,可以使用客户端命令代替如:mysql -e "SELECT ..." > file_name。这样就可以在客户主机上产生一个文件。

它同样也能将结果创建在不同的主机上,如果远程主机的文件地址可以使用网络映射路到服务器上,并且有权限被访问。这种情况下mysql(或某种客户端程序)不需要安装到目标主机上。

SELECT … INTO OUTFILE是LOAD DATA INFILE的一个组件。输出的列值的字符集被CHARACTER SET子句指定。如果没有指定该子句,输出的默认字符集是binary character set。实际上,没有字符集被转换。如果结果集包含的列有几种字符集,那么也可以很好的输出,不过你可能不能正确的导入。

export_options中的FIELDS和LINES子句用于LOAD DATA INFILE语句。(See Section 13.2.6, “LOAD DATA INFILE Syntax”

注意:由INTO OUTFILE或INTO DUMPFILE创建的文件是所有用户都可以写的。

发表回复