在linux中執行MySQL查詢是后端或DevOps開發人員的必備技能。
本文總結在bash腳本或Linux命令行界面中運行MySQL查詢的四種方法,以便開發人員能夠更好地處理MySQL數據庫。同時希望能夠對所有開發人員提供一個好參考。
注意:本文中的所有命令都不包括-p
選項以輸入密碼,因為MySQL密碼已保存在my.cnf
文件中
1 使用“-e”選項運行查詢
如果只想運行一個簡單且短小的SQL查詢,可以在查詢后面使用-e
選項。
mysql -uroot -D yang_db -e "SELECT * FROM t_post"
如上所示,-D
選項用于指定要使用的數據庫,而-e
選項用于執行查詢。
2 導入外部SQL文件
有時,數據庫管理員可能已經準備了一個包含復雜SQL操作的SQL文件。在這些情況下,仍然可以使用如下的-e
選項:
mysql -uroot -D yang_db -e "source ./getPosts.sql"
Linux中的source
命令用于讀取和執行文件的內容。
3 使用輸入重定向導入SQL文件
如果熟悉Linux中的I/O重定向技巧,還有一種方式來導入外部的.sql
文件:
mysql -uroot -D yang_db <"./getPosts.sql"
通過這種方式,不需要使用-e
選項。使用<
操作符就足夠了。
4 使用“here-document”處理多行查詢
Linux中的“here-document”概念很簡單,意味著文檔是“就在這里”,不在外部文件中。
語法如下:
<<MARKER
...
MARKER
整個文檔都在“MARKER”之內,可以使用任何字符串作為“MARKER”。
看下面的示例:
#!/bin/sh
mysql -uroot -D yang_db <<QUERY
SELECT * FROM t_post
WHERE is_del=0
AND update_time<="2077-07-07";
QUERY
如上所示,使用QUERY
作為“MARKER”。內容是要執行的SQL查詢。如果把相同的查詢寫入外部文件并通過之前的方法導入,結果將與“here-document”方法完全相同。
默認情況下,查詢的結果將輸出到Linux終端。但是,如果結果很大,并且希望將其保存到單獨的文件中,可以再次利用I/O重定向技巧:
#!/bin/sh
mysql -uroot -D yang_db >output.txt <<QUERY
SELECT * FROM t_post
WHERE is_del=0
AND update_time<="2077-07-07";
QUERY