Engineering · 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。
參考來源
- MySQL command-line options — https://dev.mysql.com/doc/refman/8.0/en/command-line-options.html
- Connect to MySQL from the CLI — https://oneuptime.com/blog/post/2026-03-31-mysql-connect-cli-client/view
Related: 回到遠端資料庫連線總覽;搭配一次性 vs REPL與 MySQL 連線參數。