在前面的章节,我们使用MySQL交互模式输入语句和查看结果。我们也可以以批处理的模式来运行MySQL。要达到这种目的,需要把我们想运行的语句放在一个文件里,然后告诉MySQL从文件读取它的输入。
shell> mysql < batch-file
如果你是在Windows下运行MySQL,文件里的一些特定字符会引起一些问题,你要这样做:
C:\> mysql -e "source batch-file"
如果你需要在命令行指定连接参数,命令应该是这样子的:
shell> mysql -h host -u user -p < batch-file
Enter password: ********
当你使用mysql这种方式,你要创建一个脚本文件,然后执行这个脚本。
如果你想让脚本继续执行,尽管有些语句在执行过程中出现错误,你应该使用[--force](https://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html#option_mysql_force)
命令行选项。
为什么要使用一个脚本?这里有一些原因:
- 如果你想重复地运行一个查询(比如每天或每星期),写成一个脚本可以让你避免每次执行的时候重新输入。
- 你可以从已有相似的脚本中,通过复制和编辑这些脚本,从而产生一些新的查询。
- 当你正在开发一个查询,尤其是那种多行语句或多行语句的序列,批处理模式也是有用的。如果你犯了一个错误,你不需要重新输入每件事。你仅仅需要编辑脚本修正错误,然后告诉MySQL重新执行。
- 如果你有一个查询,这个查询会产生许多输出,你可以通过分页展出输出,而不是用滚动条滚动你的屏幕。
shell> mysql < batch-file | more
- 对于进一步的处理,你可以捕获输出到一个文件里。
shell> mysql < batch-file > mysql.out
- 你可以分发你的脚本给其他人,使得他们也可运行这些语句。
- 一些不允许交互使用的情况,比如,当你执行一个计划任务的查询。在这种情况下,你必须使用批处理模式。
当你以批处理方式执行MySQL的时候,默认的输出格式(更加简洁)是不同于当你交互地使用MySQL。例如,当使用交互的方式执行MySQL,SELECT DISTINCT species FROM pet
的输出是像这样的:
+---------+
| species |
+---------+
| bird |
| cat |
| dog |
| hamster |
| snake |
+---------+
在批处理的模式下,它的输出是这样的:
species
bird
cat
dog
hamster
snake
如果你在批处理模式的时候,想得到交互型模式的输出格式,使用mysql -t
。要在输出中显示执行的语句,使用mysql -v
。
你也可以在MySQL命令行,通过使用\.
命令来使用脚本:
mysql> source filename;
mysql> \. filename
想学习更多,请参考“Executing SQL Statements from a Text File”