第4章:MySQL程序概述 / 4.3. 指定程序选项 / 4.3.1. 在命令行上使用选项

在命令行中指定的程序选项遵从下述规则:

·         在命令名后面紧跟选项。

·         选项参量以一个和两个破折号开始,取决于它具有短名还是长名。许多选项有两种形式。例如,-?--help是指导MySQL程序显示帮助消息的选项的短名和长名。

·         选项名对大小写敏感。-v-V均有效,但具有不同的含义。(它们是--verbose--version选项的短名)

·         部分选项在选项名后面紧随选项值。例如,-h localhost--host=localhost表示客户程序的MySQL服务器主机。选项值可以告诉程序MySQL服务器运行的主机名。

·         对于带选项值的长选项,通过一个‘=’将选项名和值隔离开来。对于带选项值的短选项,选项值可以紧随选项字母后面,或者二者之间可以用一个空格隔开。(-hlocalhost-h localhost是等效的)该规则的例外情况是指定MySQL密码的选项。该选项的形式可以为--password=pass_val--password。在后一种情况(未给出 密码值),程序将提示输入密码。也可以给出密码选项,短形式为-ppass_val-p。然而,对于短形式,如果给出了 密码值,必须紧跟在选项后面,中间不能插入空格。这样要求的原因是如果选项后面有空格,程序没有办法来告知后面的参量是 密码值还是其它某种参量。因此,下面两个命令的含义完全不同:

·                shell> mysql -ptest
·                shell> mysql -p test

第一个命令让mysql使用密码test,但没有指定默认数据库。第二个命令让mysql提示输入 密码并使用test作为默认数据库。

部分选项控制可以开关的行为。例如,mysql客户端支持--column-names选项,确定是否在查询结果开头显示一行栏目名。默认情况,该选项被启用。但是可能在某些情况下你想要禁用它,例如将mysql的输出发送到另一个只希望看到数据而不希望看到开始的标题行的程序中。

要想禁用列名,可以使用下面的形式来指定选项:

--disable-column-names
--skip-column-names
--column-names=0

--disable--skip前缀与=0后缀的效果相同:它们均关闭选项。

可以用下述方法“启用”选项:

--column-names
--enable-column-names
--column-names=1

如果选项有前缀--loose,如果程序未识别出选项不会提示错误退出,但是会发出一条警告:

shell> mysql --loose-no-such-option
mysql: WARNING: unknown option '--no-such-option'

当你从安装了多个MySQL的同一台机器上运行程序时,--loose前缀会很有用。当你在一个选项文件中列出选项时,该前缀会特别有用。有可能不能被程序的所有版本识别的选项可以冠以--loose前缀(或在选项文件中用loose)。不能识别选项的程序版本将会发出一条警告并忽视该选项。

mysql偶尔有用的另一个选项是-e--execute选项,可用来将SQL语句传递给服务器。该语句必须用引号引起来(单引号或双引号)(然而,如果想要在查询中将值引起来,则对于查询应使用双引号,查询中引用的值应使用单引号)当使用该选项时,语句被执行,然后mysql立即退出命令外壳。

例如,你可以用下面的命令获得用户账户列表:

shell> mysql -u root -p -e "SELECT User, Host FROM User" mysql
Enter password: ******
+------+-----------+
| User | Host      |
+------+-----------+
|      | gigan     |
| root | gigan     |
|      | localhost |
| jon  | localhost |
| root | localhost |
+------+-----------+
shell>

请注意mysql数据库名作为一个独立的参量传递。然而,相同的查询可能已经使用mysql -u root -p -e "SELECT UserHost FROM mysql.User"从外壳中执行。

可以按这种方式传递多个SQL语句,用分号隔开:

shell> mysql -u root -p --execute="SELECT Name FROM Country WHERE Name LIKE 'AU%';SELECT COUNT(*) FROM City" world
Enter password: ******
+-----------+
| Name      |
+-----------+
| Australia |
| Austria   |
+-----------+
+----------+
| COUNT(*) |
+----------+
|     4079 |
+----------+

请注意长形式(--execute)后面必须紧跟一个等号(=)

-e选项也可以以类似方式用来将命令传递给MySQL簇的ndb_mgm管理客户端。相关例子参见17.3.6节,“安全关闭和重启”