MySQL 客戶端 mysql 提供多種執行 SQL 的途徑,適用於互動查詢、腳本自動化、結果導出、定時任務等不同場景。本文總結五種核心方式與最佳實踐。
mysql> SELECT NOW(); +---------------------+ | NOW() | +---------------------+ | 2024-01-15 14:30:00 | +---------------------+
適用:臨時驗證、DDL 操作、探索性查詢。
mysql> SOURCE /path/to/script.sql; # 或啟動時指定 mysql -u root -p db_name < /path/to/script.sql
適用:結構部署、批量資料導入、版本控管的遷移腳本。
SELECT * FROM users INTO OUTFILE '/tmp/users.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
**注意**:輸出目錄需 MySQL 服務進程有寫入權限(通常受 secure_file_priv 限制),檔案不可覆蓋。
mysql -u root -p -e "SELECT VERSION();" # 批量多條用分號分隔 mysql -u root -p -e "USE db; SELECT COUNT(*) FROM t1; SELECT COUNT(*) FROM t2;"
適用:Shell 腳本嵌入、監控採集、CI/CD 流程。
# 執行腳本並保存結果 mysql -u root -p db_name < /path/script.sql > /path/result.txt 2>&1 # 只保存查詢結果(-N 隱藏列名) mysql -u root -p db_name -e "SELECT * FROM t" -N > /path/data.txt
**進階**:結合系統排程 (cron / Windows Task Scheduler) 實現「定時執行 SQL + 結果歸檔」。
| 方式 | 互動性 | 自動化友好 | 結果處理 | 典型場景 |
|---|---|---|---|---|
| 互動模式 | 高 | 低 | 終端顯示 | 開發調試、臨時查詢 |
| SOURCE / < 腳本 | 無 | 高 | 可重導向 | 部署遷移、批量導入 |
| INTO OUTFILE | 無 | 中 | 服務端寫檔 | 大量資料導出 CSV/TSV |
| -e 參數 | 無 | 高 | 標準輸出 | Shell 嵌入、單條監控 |
| 批次重導向 | 無 | 最高 | 檔案/管道 | 定時任務、ETL、報表生成 |
-N, --skip-column-names:不輸出列名-s, --silent:靜默模式(Tab 分隔,適合程式解析)-r, --raw:原始輸出(不轉義 \n \t 等)--xml:XML 格式輸出--html:HTML 表格輸出--default-character-set=utf8mb4:指定連線字元集,防亂碼