MySQL?如何將查詢結(jié)果導(dǎo)出到文件(select?…?into?Statement)
我們經(jīng)常會(huì)遇到需要將SQL查詢結(jié)果導(dǎo)出到文件,以便后續(xù)的傳輸或數(shù)據(jù)分析的場(chǎng)景。為了滿足這個(gè)需求,MySQL的select語(yǔ)句提供了into子句可以將的查詢結(jié)果直接導(dǎo)出到文本文件。本文就MySQL中select…into的用法進(jìn)行演示。
一、select…into語(yǔ)句簡(jiǎn)介
select…into語(yǔ)句不僅僅能夠?qū)⒉樵兘Y(jié)果導(dǎo)出到csv文件,實(shí)際上它有3種用法:
- select … into @var_list from …. 將查詢結(jié)果寫(xiě)入到一組變量
- select … into outfile from …. 將數(shù)據(jù)寫(xiě)入操作系統(tǒng)文件,可以自定義數(shù)據(jù)格式(分隔符、包裹符、轉(zhuǎn)義符、換行符等)。
- select … into dumpfile from …. 將單一行寫(xiě)入文件,沒(méi)有任何格式化
1.1 基本語(yǔ)法
根據(jù)官方文檔,into子句可以出現(xiàn)在以下3個(gè)位置。雖然3個(gè)位置都符合語(yǔ)法,但select語(yǔ)句中至多只能有1個(gè)into語(yǔ)句(位置三選一):
- 查詢字段之后,from子句前
- 鎖定子句前(未來(lái)版本即將廢棄)
- 語(yǔ)句的最后
這里推薦將into子句放在位置3,即語(yǔ)句的末尾,這樣相對(duì)普通的select語(yǔ)句更為接近,更容易理解,后面的示例也將采用這種寫(xiě)法。
二、用法示例
下面演示into子句三種用法。
2.1 將查詢結(jié)果保存到變量
into子句的一個(gè)常用場(chǎng)景就是將查詢結(jié)果暫時(shí)保存到變量中,以便后續(xù)查詢或使用,唯二要注意的點(diǎn)是變量的數(shù)量要和返回列數(shù)量匹配,并且最多只能返回一行數(shù)據(jù)。
以示例數(shù)據(jù)庫(kù)employees中的employees表為例,查詢3個(gè)結(jié)果,分別保存到3個(gè)變量中:
select emp_no,first_name,hire_date from employees limit 1 into @emp_no, @first_name, @hire_date; select @emp_no, @first_name, @hire_date;
這里用limit 1子句限制返回的結(jié)果只有1行,否則會(huì)報(bào)錯(cuò)。
2.2 將查詢結(jié)果保存到文本文件
into outfile子句可以將查詢結(jié)果導(dǎo)出到文本文件,雖然并不一定要是CSV格式,但大多數(shù)情況下我們都會(huì)選擇這種格式。
要將MySQL中的數(shù)據(jù)寫(xiě)入到操作系統(tǒng)的文件中, 首先需要具有FILE權(quán)限。而且為了安全需要配置參數(shù)secure_file_priv,這個(gè)參數(shù)是限制MySQL可以寫(xiě)入文件的目錄:
show variables like 'secure_file_priv';
我們?cè)谄胀ǖ膕elect語(yǔ)句最后添加into outfile ‘/path/file_name’;即可將查詢結(jié)果寫(xiě)入文件,這里的path就是參數(shù)secure_file_priv定義的目錄(文件不能已存在):
select *from employees where emp_no<=10010 into outfile '/opt/mysql8.0.35/mysql-files/employees.txt';
下面是導(dǎo)出文件內(nèi)容,其實(shí)into outfile文件還隱式在后面附件了2個(gè)子句:
fields terminated by '\t' enclosed by '' escaped by '\\' lines terminated by '\n' starting by ''
- fields 表示字段屬性,terminated by ‘\t’ 以制表符分割字段,enclosed by ‘’ 不包裹字段,escaped by ‘\\’ 反斜線表示轉(zhuǎn)義符(這里2個(gè)反斜線,第一個(gè)是轉(zhuǎn)義符,第二個(gè)是反斜線)
- lines 表示行屬性,terminated by ‘\n’ \n代表?yè)Q行符,starting by ‘’ 行的起點(diǎn)字符是空。
如果要導(dǎo)出CSV格式的文件,并且以雙引號(hào)"包裹字段,那么只需要增加一個(gè)fields terminated by ‘,’ enclosed by '"'子句即可,其他的保持默認(rèn):
select *from employees where emp_no<=10010 into outfile '/opt/mysql8.0.35/mysql-files/employees.csv' fields terminated by ',' encolsed by '"';
可以看到這次導(dǎo)出結(jié)果就是以逗號(hào)分割,以雙引號(hào)包裹字段的數(shù)據(jù):
2.3 將查詢結(jié)果保存到dumpfile
into dumpfile 子句可以將一行數(shù)據(jù)導(dǎo)出到文件,但是它不會(huì)做任何的分割,格式的定義,轉(zhuǎn)義等操作。相對(duì)應(yīng)用場(chǎng)景較少,這個(gè)操作通常用于將大型的BLOB字段保存到文件中,了解即可:
select *from employees limit 1 into dumpfile '/opt/mysql8.0.35/mysql-files/employees.dump';
注意select語(yǔ)句只能返回一行結(jié)果,否則會(huì)報(bào)錯(cuò)。
導(dǎo)出的結(jié)果如下,可以看到數(shù)據(jù)沒(méi)有任何分隔,都連在了一起,連換行都沒(méi)有(提示符和數(shù)據(jù)顯示在同一行):
到此這篇關(guān)于MySQL 將查詢結(jié)果導(dǎo)出到文件(select … into Statement)的文章就介紹到這了,更多相關(guān)mysql查詢結(jié)果導(dǎo)出到文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一篇文章徹底搞定MySQL中的JSON類(lèi)型(效率非???
這篇文章主要介紹了關(guān)于MySQL中JSON類(lèi)型的相關(guān)資料,MySQL?5.7.8引入JSON數(shù)據(jù)類(lèi)型,提供原生支持,相比字符類(lèi)型,具有優(yōu)勢(shì),JSON數(shù)據(jù)類(lèi)型對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,自動(dòng)將布爾類(lèi)型轉(zhuǎn)換為小寫(xiě),文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-12-12解決MySQL中IN子查詢會(huì)導(dǎo)致無(wú)法使用索引問(wèn)題
這篇文章主要介紹了MySQL中IN子查詢會(huì)導(dǎo)致無(wú)法使用索引問(wèn)題,文章給大家介紹了兩種子查詢的寫(xiě)法,需要的朋友可以參考下2017-06-06詳解MySQL多版本并發(fā)控制機(jī)制(MVCC)源碼
MVCC,即多版本并發(fā)控制(Multi-Version Concurrency Control)指的是,通過(guò)版本鏈維護(hù)一個(gè)數(shù)據(jù)的多個(gè)版本,使得讀寫(xiě)操作沒(méi)有沖突,可保證不同事務(wù)讀寫(xiě)、寫(xiě)讀操作并發(fā)執(zhí)行,提高系統(tǒng)性能2021-06-06MYSQL中SWITCH語(yǔ)句和循環(huán)語(yǔ)句舉例詳解
MySQL提供了多種循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)循環(huán)操作,其中包括while循環(huán)、loop循環(huán)、repeat循環(huán)和非標(biāo)準(zhǔn)的goto循環(huán),下面這篇文章主要給大家介紹了關(guān)于MYSQL中SWITCH語(yǔ)句和循環(huán)語(yǔ)句的相關(guān)資料,需要的朋友可以參考下2024-06-06MySQL查詢指定字段不是數(shù)字與逗號(hào)的sql
今天小編遇到一個(gè)問(wèn)題因?yàn)榫庉嫷牟患?xì)心不小心將關(guān)鍵詞寫(xiě)到相關(guān)文章里面導(dǎo)致頁(yè)面無(wú)法生成,這里用sql語(yǔ)言將這些內(nèi)容獲取出來(lái)2020-02-02MySQL8.0創(chuàng)建用戶和權(quán)限控制示例詳解
這篇文章主要為大家介紹了MySQL8.0創(chuàng)建用戶和權(quán)限控制實(shí)現(xiàn)過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07