#### 4.2.2.1 使用命令行选项

命令行上指定的程序选项遵循以下规则：

-   选项在命令名称之后给出。

-   选项参数以一个破折号或两个破折号开头，具体取决于它是选项名称的短格式还是长格式。许多选项都有短格式和长格式。例如，`-？`和`- 帮助`是指示 MySQL 程序显示其帮助消息的选项的短形式和长形式。

-   选项名称区分大小写。`-v`和`-V`都是合法的并且有不同的含义。（它们是相应的缩写形式`--详细`和`- 版本`选项。）

-   某些选项在选项名称之后采用一个值。例如，`-h 本地主机`要么[`--主机=本地主机`](connection-options.html#option_general_host)将 MySQL 服务器主机指示给客户端程序。选项值告诉程序运行 MySQL 服务器的主机的名称。

-   对于带值的长选项，用一个分隔选项名称和值`=`标志。对于带值的空头期权，期权值可以紧跟在期权字母之后，或者之间可以有空格：`-hlocalhost`和`-h 本地主机`是等价的。此规则的一个例外是指定 MySQL 密码的选项。此选项可以以长形式给出[`--密码=*`pass_val`*`](connection-options.html#option_general_password)或作为[`- 密码`](connection-options.html#option_general_password).在后一种情况下（没有给出密码值），程序会交互式地提示您输入密码。密码选项也可以简写为`-p*`pass_val`*`或作为`-p`.但是，对于简写形式，如果给出密码值，则必须在选项字母后面加上*没有中间空间*: 如果选项字母后面有一个空格，程序无法判断后面的参数是密码值还是其他类型的参数。因此，以下两个命令具有两种完全不同的含义：

    ```
    mysql -ptest
    mysql -p test
    ```

    第一个命令指示[**mysql**](mysql.html)使用密码值`测试`，但不指定默认数据库。第二个指示[**mysql**](mysql.html)提示输入密码值并使用`测试`作为默认数据库。

-   在选项名称中，破折号 (`-`) 和下划线 (`_`) 可以互换使用。例如，[`--skip-grant-tables`](server-options.html#option_mysqld_skip-grant-tables)和[`--skip_grant_tables`](server-options.html#option_mysqld_skip-grant-tables)是等价的。（但是，前导破折号不能作为下划线给出。）

-   MySQL 服务器具有某些只能在启动时指定的命令选项，以及一组系统变量，其中一些可以在启动时、运行时或两者兼而有之时设置。系统变量名称使用下划线而不是破折号，并且在运行时引用时（例如，使用[`放`](set-variable.html)要么[`选择`](select.html)语句），必须使用下划线书写：

    ```
    SET GLOBAL general_log = ON;
    SELECT @@GLOBAL.general_log;
    ```

    在服务器启动时，系统变量的语法与命令选项的语法相同，因此在变量名中，破折号和下划线可以互换使用。例如，[`--general_log=ON`](server-system-variables.html#sysvar_general_log)和[`--general-log=ON`](server-system-variables.html#sysvar_general_log)是等价的。（对于在选项文件中设置的系统变量也是如此。）

-   对于采用数值的选项，该值可以带有后缀`ķ`,`米`， 要么`G`表示乘数 1024, 1024<sup>2</sup>或 1024<sup>3</sup>.从 MySQL 8.0.14 开始，后缀也可以是`吨`,`磷`， 和`乙`表示 1024 的乘数<sup>4</sup>, 1024<sup>5</sup>或 1024<sup>6</sup>.后缀字母可以是大写或小写。

    例如，下面的命令告诉[**mysql管理员**](mysqladmin.html)ping 服务器 1024 次，每次 ping 之间休眠 10 秒：

    ```
    mysqladmin --count=1K --sleep=10 ping
    ```

-   将文件名指定为选项值时，请避免使用`~`外壳元字符。它可能不会像您期望的那样被解释。

    在命令行中给出包含空格的选项值时必须用引号引起来。例如，[`- 执行`](mysql-command-options.html#option_mysql_execute)（要么`-e`) 选项可以与[**mysql**](mysql.html)将一个或多个以分号分隔的 SQL 语句传递给服务器。使用此选项时，[**mysql**](mysql.html)执行选项值中的语句并退出。语句必须用引号括起来。例如：


```
$> mysql -u root -p -e "SELECT VERSION();SELECT NOW()"
Enter password: ******
+------------+
| VERSION()  |
+------------+
| 8.0.19     |
+------------+
+---------------------+
| NOW()               |
+---------------------+
| 2019-09-03 10:36:48 |
+---------------------+
$>
```

笔记

长形式（[`- 执行`](mysql-command-options.html#option_mysql_execute)) 后跟一个等号 (`=`）。

要在语句中使用带引号的值，您必须转义内部引号，或者在语句中使用与用于引用语句本身的引号不同类型的引号。命令处理器的功能决定了您是否可以使用单引号或双引号以及转义引号字符的语法。例如，如果您的命令处理器支持使用单引号或双引号引起来，您可以在语句周围使用双引号，并为语句中的任何引用值使用单引号。
