发布时间:2025-12-09 11:52:48 浏览次数:1
select [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr] ... [into_option] [FROM table_references [PARTITION partition_list]] [WHERE where_condition] [GROUP BY {col_name | expr | position}, ... [WITH ROLLUP]] [HAVING where_condition] [WINDOW window_name AS (window_spec) [, window_name AS (window_spec)] ...] [ORDER BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [LIMIT {[offset,] row_count | row_count OFFSET offset}] [into_option] [FOR {update | SHARE} [OF tbl_name [, tbl_name] ...] [NOWAIT | SKIP LOCKED] | LOCK IN SHARE MODE] [into_option]into_option: { INTO outfile 'file_name' [CHARACTER SET charset_name] export_options | INTO DUMPFILE 'file_name' | INTO var_name [, var_name] ...}1、select ... INTO 语句可以将查询结果存储在一个变量中或文件中。
2、INTO 从句可以出现在 select 语句的几个不同的位置,但只能出现一次。INTO 从句不能用在 内嵌的 select 语句中
# 在 FROM 之前select * INTO @myvar FROM t1;# 在 锁 之前, MySQL 8.0.20 已经 过时,可能会移除select * FROM t1 INTO @myvar FOR update;# 在语句的最后, MySQL 8.0.20 支持select * FROM t1 FOR update INTO @myvar;# 可以用 LIMIT 1 限制返回的行数select id, data INTO @x, @y FROM test.t1 LIMIT 1;# TABLE 语句, 类似 select * FROM employeesTABLE employees ORDER BY lname DESC LIMIT 1 INTO @id, @fname, @lname, @hired, @separated, @job_code, @store_id;select * FROM (VALUES ROW(2,4,8)) AS t INTO @x,@y,@z;select * FROM (VALUES ROW(2,4,8)) AS t(a,b,c) INTO @x,@y,@z;# 等同于 SET @x=2, @y=4, @z=8;5、 select ... INTO outfile 'file_name' ,会在服务器 上创建一个文件,文件名不能是已存在的。需要用户有 FILE 权限。
如果客户端是远程的话,产生的文件可能不太方便访问到,因为只是mysql 客户端的话,不能访问服务器的文件系统。
这时可以使用 客户端命令: mysql -e "select ..." > file_name, 这样产生的文件就会在客户端上的主机上了。
6、select ... INTO outfile 和 LOAD DATA 语句是,互为相反的操作。都有 export_options,包含 FIELDS 从句 和 LINES 从句
# export_options [{FIELDS | COLUMNS} [TERMINATED BY 'string'] # 列 结束的字符串 [[OPTIONALLY] ENCLOSED BY 'char'] # 列 被什么字符环绕 [ESCAPED BY 'char'] # 列 的转义字符处理 ][LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ]TABLE employees ORDER BY lname LIMIT 1000 INTO outfile '/tmp/employee_data_1.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"', ESCAPED BY '\' LINES TERMINATED BY '\n';select * FROM (VALUES ROW(1,2,3),ROW(4,5,6),ROW(7,8,9)) AS t INTO outfile '/tmp/select-values.txt';如果你使用INTO DUMPFILE而不是INTO outfile, MySQL只写入一行到文件中,没有任何列或行终止,也没有执行任何转义处理。这对于选择BLOB值并将其存储在文件中非常有用
https://dev.mysql.com/doc/refman/8.0/en/select-into.html
https://dev.mysql.com/doc/refman/8.0/en/table.html
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_character_set_filesystem
https://dev.mysql.com/doc/refman/8.0/en/load-data.html