## 3.5 在批處理模式使用 mysql
在前幾節, 你使用交互式 [`mysql`](mysql.md) 輸入語句并查看結果. 你也可以在批處理模式中使用 [`mysql`](mysql.md). 要做到這一點, 把你想要運行的語句放在一個語句中, 然后告訴 [`mysql`](mysql.md) 從文件中讀取:
```bash
shell> mysql < batch-file
```
如果你在 Windows 中運行 [`mysql`](mysql.md), 并且文件中有一些特殊字符可能會導致問題, 你可以這樣做:
```bash
C:\> mysql -e "source batch-file"
```
如果你需要在命令上指定連接參數, 命令可能如下所示:
```bash
shell> mysql -h host -u user -p < batch-file
Enter password: ********
```
當你以這種方式使用 [`mysql`](mysql.md) 時, 你可以創建一個腳本文件, 然后執行該腳本.
如果運行的腳本中一些語句產生了錯誤, 你應該使用 [`--force`](https://dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html#option_mysql_force) 命令行選項.
為什么要使用腳本? 原因如下:
- 如果你想重復運行一個查詢 (例如每天或者每周), 那么將它作為腳本可以使你避免在每次執行查詢時重新輸入它.
- 你可以通過復制和編輯腳本, 從現有的腳本中生成新的腳本.
- 在開發查詢時, 批處理模式非常有用, 特別時對于多行語句或者多語句序列. 如果你犯了一個錯誤, 你不需要重新輸入所有的東西. 僅需要編輯你的腳本來糾正錯誤, 然后告訴 [`mysql`](mysql.md) 再次執行它.
- 如果你有一個查詢產生了大量的輸出, 你可以通過 paper 來運行輸出而不是看著它從你的屏幕頂部滾動:
```bash
shell> mysql < batch-file | more
```
- 你也可以從文件中捕獲輸出, 以便進一步處理
```bash
shell> mysql < batch-file > mysql.out
```
- 你也可以將腳本發給其他人, 以便其他人運行查詢.
- 有些情況不允許交互式操作, 例如, 當你從 `cron` 運行查詢時. 在這種情況下, 必須使用批處理程序.
當以批處理模式運行 [`mysql`](mysql.md) 時, 默認的輸出格式與交互式使用時不同(更簡潔). 例如, 當 [`mysql`](mysql.md) 交互式運行時, `SELECT DISTINCT species FROM pet` 的 輸出如下:
```sql
+---------+
| species |
+---------+
| bird |
| cat |
| dog |
| hamster |
| snake |
+---------+
```
在批處理模式下, 輸出看起來是這樣的:
```sql
species
bird
cat
dog
hamster
snake
```
如果希望以批處理模式獲得交互式輸出格式, 使用 [`mysql -t`](mysql.md). 輸出執行的語句, 使用 [`mysql -v`](mysql.md).
你也可以使用 `source` 命令或者 `\.` 命令從 [`mysql`](mysql.md) 提示符中使用腳本:
```sql
mysql> source filename;
mysql> \. filename
```
參閱 [Section 4.5.1.5, “從文本文件中執行 SQL 語句”](https://dev.mysql.com/doc/refman/8.0/en/mysql-batch-commands.html)獲取更多信息.
- 簡介
- 前言和法律條款
- 安裝和更新 MySQL
- 在 Linux 上安裝 MySQL
- 在 Linux 上使用 APT 庫安裝 MySQL
- 在 Linux 上使用 Docker 部署 MySQL
- 使用 Docker 部署 MySQL 服務器的基本步驟
- 使用 Docker 部署 MySQL 服務器的更多主題
- 教程
- 連接到服務器和從服務器斷開
- 輸入查詢
- 創建和使用數據庫
- 創建和選擇數據庫
- 創建表
- 將數據加載到表中
- 從表中檢索數據
- 選擇所有數據
- 選擇特定行
- 選擇指定列
- 行排序
- 日期計算
- 處理 NULL 值
- 模式匹配
- 計算行數
- 使用多個表
- 獲取數據庫和表的信息
- 在批處理模式使用 mysql
- 常見查詢示例
- 列的最大值
- 包含某一行最大值的記錄
- 每組中列的最大值
- 擁有某個字段的組間最大值的行
- 使用用戶自定義變量
- 使用外鍵
- 兩個鍵上搜索
- 計算每日訪問量
- 使用 AUTO_INCREMENT
- 在 Apache 中使用 MySQL
- MySQL 程序
- MySQL 客戶端程序
- mysql — MySQL 命令行客戶端
- 優化
- 優化概述
- 優化 SQL 語句
- 優化和索引
- 優化數據庫結構
- 優化 InnoDB 表
- 優化 MyISAM 表
- 優化 MEMORY 表
- 理解查詢執行計劃
- 控制查詢優化器
- 緩沖和緩存
- 優化鎖操作
- 優化 MySQL 服務器
- 測量性能 (Benchmarking)
- 檢查線程信息