6.5.1.2 mysql 客户端命令
mysql 将您发出的每个 SQL 语句发送到服务器执行。还有一个命令集,mysql 自身解释。要获取这些命令的列表,请在 mysql>
提示符上输入 help
或 \h
:
mysql> help
List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
? (\?) Synonym for `help'.
clear (\c) Clear the current input statement.
connect (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter.
edit (\e) Edit command with $EDITOR.
ego (\G) Send command to mysql server, display result vertically.
exit (\q) Exit mysql. Same as quit.
go (\g) Send command to mysql server.
help (\h) Display this help.
nopager (\n) Disable pager, print to stdout.
notee (\t) Don't write into outfile.
pager (\P) Set PAGER [to_pager]. Print the query results via PAGER.
print (\p) Print current command.
prompt (\R) Change your mysql prompt.
quit (\q) Quit mysql.
rehash (\#) Rebuild completion hash.
source (\.) Execute an SQL script file. Takes a file name as an argument.
status (\s) Get status information from the server.
system (\!) Execute a system shell command.
tee (\T) Set outfile [to_outfile]. Append everything into given
outfile.
use (\u) Use another database. Takes database name as argument.
charset (\C) Switch to another charset. Might be needed for processing
binlog with multi-byte charsets.
warnings (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.
resetconnection(\x) Clean session context.
query_attributes Sets string parameters (name1 value1 name2 value2 ...)
for the next query to pick up.
ssl_session_data_print Serializes the current SSL session data to stdout
or file.
For server side help, type 'help contents'
如果 mysql 以 --binary-mode
选项调用,所有 mysql 命令都被禁用,除了在非交互模式(输入直接传递给 mysql 或者使用 source
命令加载)中可用的 charset
和 delimiter
。
每个命令都有长和短的形式。长形式不区分大小写;短形式则是。长形式可以跟随一个可选的分号终止符,但短形式不应该这样做。
在多行注释中使用短语格式的命令是不被支持的。短语格式的命令在单行注释中是有效的,同样地,/*+ ... */
的优化器提示注释也是有效的,它们会存储在对象定义中。如果担心当使用 mysql 加载 dump 文件时,优化器提示注释可能会被执行,可以使用 --binary-mode
选项或者使用其他的重载客户端而不是 mysql。
-
help [
,arg
]\h [
,arg
]\? [
,arg
]? [
arg
]显示一个帮助消息,列出所有可用的 mysql 命令。
如果您向
help
命令提供一个参数,mysql 将其作为搜索字符串来访问 MySQL 参考手册中的服务器端帮助。有关更多信息,请参阅第 6.5.1.4 节,“mysql 客户端服务器端帮助”。 -
更改默认字符集并发出一个
SET NAMES
语句。这使得字符集在运行时保持客户端和服务器的一致,如果 mysql 使用自动重连功能(这不推荐),因为指定的字符集用于重连。 -
清除当前输入。使用这个命令如果您改变主意,不想执行您正在输入的语句。
-
连接 [
,数据库名称
[主机名称
]]\r [
数据库名称
[主机名称
]]重新连接到服务器。可选的数据库名称和主机名称参数可以给出,以指定默认数据库或运行服务器的主机。如果省略,当前值将被使用。
如果
connect
命令指定了主机名称参数,那么该主机将优先于在--dns-srv-name
选项中给出的任何 DNS SRV 记录,以指定启动时的 mysql。 -
更改 mysql 解释的字符串,它将被用作 SQL 语句之间的分隔符。默认是分号字符 (
;
))。分隔符字符串可以作为未引号或引号的命令行参数指定给
delimiter
命令。引号可以使用单引号 ('
), 双引号 ("
) 或者反引号 (`
) 字符来进行。要在引用的字符串中包含一个引号,或者用不同的引号字符引用字符串,或使用反斜杠 (\
) 字符来转义引号。避免在未引用的字符串外部使用反斜杠,因为它是 MySQL 的转义字符。在未引用的参数中,分隔符读取到第一个空格或行尾。在引用的参数中,分隔符读取到匹配的引号末尾。mysql 将分隔符字符串的任何实例解释为语句分隔符,除非它出现在引用的字符串中。小心定义一个可能在其他单词中出现的分隔符。例如,如果你将分隔符定义为
X
, 那么在语句中使用INDEX
这个词是不可能的。mysql 将这个解释为INDE
后跟分隔符X
。当MySQL命令行客户端中识别的分隔符与mysql的默认值不同(通常是
;
),则该字符在发送到服务器之前不会被解释。然而,服务器本身仍然将;
视为语句分隔符,并根据需要处理语句。这方面的行为在服务器端对于多条语句的执行(参见支持多条语句)以及解析存储程序、函数、触发器和事件的主体(参见第27.1节 “定义存储程序”)非常重要。 -
编辑当前输入语句。MySQL命令行客户端会检查
EDITOR
和VISUAL
环境变量的值来确定应该使用哪个编辑器。如果两个变量都未设置,默认编辑器是vi。只有在Unix系统上,
edit
命令才有效。 -
将当前语句发送到服务器执行,并使用垂直格式显示结果。
-
退出mysql.
-
将当前语句发送到服务器执行。
-
禁用输出分页。请参阅
pager
的描述。 -
禁用输出复制到tee文件。请参阅
tee
的描述。 -
禁用每个语句后的警告显示。
-
启用输出分页。通过在调用mysql时使用
--pager
选项,您可以在交互模式下浏览或搜索查询结果,使用类似Unix程序的less
、more
等。若未指定该选项的值,mysql会检查环境变量PAGER
的值并设置分页器为该值。分页功能仅在交互模式下有效。可以通过命令行或交互式界面启用输出分页,使用
pager
命令禁用它。该命令接受可选参数;如果提供,则设置分页程序为该值。如果未提供参数,则分页器将设置为命令行上设置的分页器,或者在没有指定分页器时为stdout
。输出分页仅在Unix系统上有效,因为它使用了
popen()
函数,该函数在Windows上不存在。在Windows上,可以使用tee
选项来代替分页器,尽管它在某些情况下不如分页器方便用于浏览输出。 -
打印当前输入语句而不执行它。
-
重配置mysql提示符为给定的字符串。可以在提示符中使用的特殊字符序列后续在本节中描述。
如果您不指定
prompt
命令,mysql将重置提示符为默认的mysql>
。 -
查询属性
name
value
[name
value
...]为服务器发送的下一条查询定义查询属性。关于查询属性的目的和用法,请参阅第11.6节,“查询属性”。
`query_attributes` 命令遵循以下规则:
-
quit
,\q
退出 mysql。
-
rehash
,\#
重建启用您输入语句时数据库、表格和列名完成的完成哈希。请参阅
--auto-rehash
选项的描述。 -
重置连接以清除会话状态。这包括清除使用
query_attributes
命令定义的任何当前查询属性。重置连接的效果类似于
mysql_change_user()
或自动重新连接,但连接不会关闭并重新打开,且重新认证也不进行。请参阅 mysql_change_user() 和 自动重新连接控制。以下是重置连接如何清除会话状态中值的一个示例:
mysql> SELECT LAST_INSERT_ID(3); +-------------------+ | LAST_INSERT_ID(3) | +-------------------+ | 3 | +-------------------+ mysql> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 3 | +------------------+ mysql> resetconnection; mysql> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 0 | +------------------+
-
读取指定的文件并执行其中包含的语句。在 Windows 上,指定路径名称分隔符为
/
或\\
。引号字符被视为文件名的一部分。为了获得最佳效果,文件名不应包含空格字符。
-
从成功连接中获取、序列化并可选地存储会话数据。可以给出文件名和参数来指定用于存储序列化会话数据的文件。如果省略,序列化的会话数据将被打印到
stdout
。如果 MySQL 会话配置为重用,那么从文件中反序列化的会话数据将被提供给
connect
命令以重新连接。当会话成功重用时,客户端将保持与服务器的连接状态,并且status
命令中的行将显示SSL session reused: true
。 -
提供关于连接和您正在使用的服务器的状态信息。如果您启用了
--safe-updates
,status
还将打印影响查询的 mysql 变量。 -
使用您的默认命令解释器执行给定的命令。
-
tee [
,file_name
]\T [
file_name
]通过在调用 mysql 时使用
--tee
选项,您可以记录语句及其输出。屏幕上显示的所有数据都将被追加到给定的文件中。这对于调试目的也非常有用。 mysql 在每个语句之后都会将结果刷新到文件中,紧接着它会打印下一个提示符。Tee 功能仅在交互模式下有效。您可以通过
tee
命令交互地启用此功能。如果没有参数,则使用之前的文件。可以通过notee
命令禁用tee
文件。再次执行tee
命令会重新启用日志记录。 -
将
db_ name
用作默认数据库。 -
在每个语句之后显示警告(如果有的话)。
以下是关于 pager
命令的一些提示:
-
您可以使用它将输出写入文件,并且结果只会出现在文件中:
mysql> pager cat > /tmp/log.txt
您还可以传递给 pager 程序的任何选项作为您的 pager 使用:
mysql> pager less -n -i -S
-
在上述例子中,请注意
-S
选项。您可能会发现它对于浏览宽泛的查询结果非常有用。有时候,一个非常宽的结果集很难在屏幕上阅读。-S
选项到 less 可以使结果集更加易读,因为您可以使用左箭头和右箭头键来横向滚动它。您还可以在 less 中交互式地使用-S
来开启或关闭横向浏览模式。要了解更多信息,请阅读 less 的手册页。man less
-
您可以将
-F
和-X
选项与 less 一起使用,以便在输出适合一屏幕时退出,这对于不需要滚动的情况非常方便:mysql> pager less -n -i -S -F -X
-
您可以为处理查询输出指定非常复杂的分页器命令:
mysql> pager cat | tee /dr1/tmp/res.txt \ | tee /dr2/tmp/res2.txt | less -n -i -S
在这个例子中,命令将查询结果发送到两个文件中,它们位于
/dr1
和/dr2
这两个不同目录中的两个不同的文件系统上,但仍然使用 less 在屏幕上显示结果。
您还可以将 tee
和 pager
功能结合使用。启用一个 tee
文件,并将 pager
设置为 less,这样您就可以使用 less 程序浏览结果,同时所有内容也会实时附加到文件中。Unix 中的 tee
与 pager
命令的区别,以及 MySQL 内置的 tee
命令之间的区别在于,MySQL 内置的 tee
可以工作,即使您没有 Unix 上的 tee 可用。内置的 tee
还会记录屏幕上打印的所有内容,而 Unix 中的 tee 用于 pager
时则不完全记录。此外,tee
文件日志可以在 MySQL 命令行客户端中交互式地开启或关闭。这对于想要将某些查询日志到文件,而不是其他查询时非常有用。
`prompt` 命令重新配置默认的 `mysql>` 提示符。定义提示符的字符串可以包含以下特殊序列。
Option | Description |
---|---|
\C |
当前连接标识符 |
\c |
一个计数器,每次您发出语句时都会递增 |
\D |
完整的当前日期 |
\d |
默认数据库 |
\h |
服务器主机 |
\l |
当前分隔符 |
\m |
当前时间的分钟数 |
\n |
换行符 |
\O |
当前月份,格式为三位字母(一月、二月、…) |
\o |
当前月份的数字表示 |
\P |
上午/下午 |
\p |
当前TCP/IP端口或套接字文件 |
\R |
当前时间,24小时制(0-23) |
\r |
当前时间,标准12小时制(1-12) |
\S |
分号 |
\s |
当前时间的秒数 |
\T |
如果当前会话正在一个事务块内,则打印星号(*) |
\t |
制表符 |
\U |
您的全名 |
\u |
您的用户名 |
\v |
服务器版本 |
\w |
当前日期的星期几,三字母格式(周一,周二,…) |
\Y |
当前年份,四位数 |
\y |
当前年份,两位数 |
\_ |
一个空格 |
\ |
一个空格(一个空格跟在反斜杠后面) |
\' |
单引号 |
\" |
双引号 |
\\ |
一个字面上的反斜杠字符(\ ) |
\ |
|
您可以以几种方式设置提示符:
-
使用环境变量。 您可以将
MYSQL_PS1
环境变量设置为一个提示符字符串。例如:export MYSQL_PS1="(\u@\h) [\d]> "
-
使用命令行选项。 您可以在命令行中使用
--prompt
选项来设置mysql。例如:$> mysql --prompt="(\u@\h) [\d]> " (user@host) [database]>
-
使用选项文件。 你可以在MySQL选项文件中,例如
/etc/my.cnf
或你的家目录下的.my.cnf
文件中的[mysql]
组设置prompt
选项。例如:[mysql] prompt=(\\u@\\h) [\\d]>\\_
在这个例子中,请注意反斜杠被双倍化。如果你使用选项文件中的
prompt
选项来设置提示符,建议在使用特殊的提示符选项时将反斜杠翻倍。有关于允许的提示符选项和特殊转义序列(在选项文件中被识别)的重叠。(选项文件中的转义序列规则详见第6.2.2.2节,“使用选项文件”。)重叠可能会在你使用单个反斜杠时导致问题。例如,\s
被解释为空格而不是当前秒数的值。以下是如何在选项文件中定义一个提示符以包括当前时间的例子,格式为
:hh:mm:ss
>[mysql] prompt="\\r:\\m:\\s> "
-
交互式设置提示符。 你可以通过使用
prompt
(或\R
)命令来更改你的提示符。例如:mysql> prompt (\u@\h) [\d]>\_ PROMPT set to '(\u@\h) [\d]>\_' (user@host) [database]> (user@host) [database]> prompt Returning to default PROMPT of mysql> mysql>