Skip to content
所有文章 ‹ Part 08 of 09 · 從筆電連上遠端資料庫
工程 · 1 min read

MySQL CLI:內嵌 SQL 的四種餵法

不進互動 session,把 SQL 餵給 mysql 的四種方式:單一 -e、分號隔開多句、引號起分隔符的 heredoc,或從 .sql 檔;要 pipe 就加 --batch。

不進互動 session,把 SQL 餵給 mysql 的四種方式:

1. 單一句內嵌(-e):

mysql … -e "SELECT * FROM asset WHERE uploaded_package_id = 100"

2. 多句:在同一個 -e 裡用分號隔開:

mysql … -e "USE app_production; SELECT COUNT(*) FROM asset; SELECT NOW();"

3. Heredoc:多行最乾淨,把分隔符引號起來('SQL'),shell 才不會去展開 $/backtick:

mysql … -D app_production <<'SQL'
SELECT a.asset_id, a.`size`
FROM   asset AS a
WHERE  uploaded_package_id = 100;
SQL

4. 從 .sql 檔:

mysql … app_production < query.sql      # shell redirect
mysql … -e "source query.sql"           # MySQL 自己的 source 指令
  • 要機器可解析的輸出:加 --batch(tab 分隔)+ --skip-column-names(去掉表頭),再 pipe 給 jq/Python。

這次的實例: 把 --batch --skip-column-names 的輸出 pipe 進 Python,用 prod query 的結果組出一份 per-asset_id 的 JSON config。

一句用 -e、多行用 heredoc(引號起分隔符)、要 pipe 就加 --batch --skip-column-names。


參考來源

Related: 回到遠端資料庫連線總覽。搭配一次性 vs REPL與 MySQL 連線參數。

↑↓ 移動 ↵ 開啟 esc 關閉