## 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)
- 检查线程信息