文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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'

如果使用 --binary-mode 选项调用 mysql,除了在非交互模式下(对于管道到 mysql 的输入或使用 source 命令加载的输入)的 charsetdelimiter 之外,所有 mysql 命令都将被禁用。

每个命令都有长格式和短格式。长格式不区分大小写;短格式区分大小写。长格式后面可以跟一个可选的分号终止符,但短格式不应跟。

在多行 /* ... */ 注释中不支持使用短格式命令。短格式命令在单行 /*! ... */ 版本注释中有效,/*+ ... */ 优化器提示注释也是如此,这些注释存储在对象定义中。如果担心优化器提示注释可能存储在对象定义中,以便使用 mysql 重新加载的转储文件会导致执行此类命令,则可以调用 mysql 时使用 --binary-mode 选项,或者使用除 mysql 之外的重新加载客户端。

  • help [arg], \h [arg], \? [arg], ? [arg]

    显示一条帮助消息,列出可用的 mysql 命令。

    如果您为 help 命令提供参数,mysql 会使用它作为搜索字符串,从 MySQL 参考手册的内容中访问服务器端帮助。有关更多信息,请参见 第 6.5.1.4 节,“mysql 客户端服务器端帮助”

  • charset charset_name, \C charset_name

    更改默认字符集并发出 SET NAMES 语句。这使得字符集可以在客户端和服务器上保持同步,如果 mysql 在启用自动重新连接的情况下运行(不建议这样做),因为指定的字符集用于重新连接。

  • clear, \c

    清除当前输入。如果您改变主意不想执行正在输入的语句,请使用它。

  • connect [db_name [host_name]], \r [db_name [host_name]]

    重新连接到服务器。可选的数据库名称和主机名称参数可以用来指定默认数据库或服务器运行的主机。如果省略,则使用当前值。

    如果 connect 命令指定了主机名参数,则该主机优先于 --dns-srv-name 选项,该选项在 mysql 启动时指定 DNS SRV 记录。

  • delimiter str, \d str

    更改 mysql 解释为 SQL 语句之间分隔符的字符串。默认值为分号字符 (;)。

    分隔符字符串可以作为 delimiter 命令行上的未加引号或加引号的参数指定。加引号可以使用单引号 (')、双引号 (") 或反引号 (`) 字符。要在加引号的字符串中包含引号,请使用不同的引号字符加引号,或者使用反斜杠 (\) 字符转义引号。在加引号的字符串之外应避免使用反斜杠,因为它是在 MySQL 中的转义字符。对于未加引号的参数,分隔符将一直读取到第一个空格或行尾。对于加引号的参数,分隔符将一直读取到该行上的匹配引号。

    mysql 将分隔符字符串的实例解释为语句分隔符,无论它出现在何处,除了加引号的字符串中。在定义分隔符时要小心,因为分隔符可能出现在其他单词中。例如,如果将分隔符定义为 X,则无法在语句中使用单词 INDEXmysql 将其解释为 INDE 后跟分隔符 X

    mysql 识别的分隔符设置为除默认的 ; 之外的其他字符时,该字符的实例将被发送到服务器,不会被解释。但是,服务器本身仍然将 ; 解释为语句分隔符,并相应地处理语句。服务器端的这种行为在多语句执行(参见 Multiple Statement Execution Support)和解析存储过程和函数、触发器和事件的主体(参见 Section 27.1, “Defining Stored Programs”)时起作用。

  • edit, \e

    编辑当前输入语句。 mysql 检查 EDITORVISUAL 环境变量的值来确定要使用哪个编辑器。如果这两个变量都没有设置,则默认编辑器为 vi

    edit 命令仅在 Unix 中有效。

  • ego, \G

    将当前语句发送到服务器执行,并使用垂直格式显示结果。

  • exit, \q

    退出 mysql

  • go, \g

    将当前语句发送到服务器执行。

  • nopager, \n

    禁用输出分页。参见 pager 的描述。

    nopager 命令仅在 Unix 中有效。

  • notee, \t

    禁用将输出复制到 tee 文件。参见 tee 的描述。

  • nowarning, \w

    禁用在每个语句之后显示警告。

  • pager [command], \P [command]

    启用输出分页。通过在调用 mysql 时使用 --pager 选项,可以使用 Unix 程序(如 lessmore 或任何其他类似程序)以交互方式浏览或搜索查询结果。如果您没有为该选项指定值,mysql 将检查 PAGER 环境变量的值,并将分页器设置为该值。分页器功能仅在交互模式下有效。

    可以使用 pager 命令以交互方式启用输出分页,并使用 nopager 禁用输出分页。该命令接受一个可选参数;如果给出,则分页程序将设置为该参数。如果没有参数,则分页器将设置为在命令行上设置的分页器,或者如果未指定分页器,则设置为 stdout

    输出分页仅在 Unix 中有效,因为它使用 popen() 函数,该函数在 Windows 上不存在。对于 Windows,可以使用 tee 选项来保存查询输出,尽管在某些情况下,它不如 pager 方便用于浏览输出。

  • print, \p

    打印当前输入语句,但不执行它。

  • prompt [str], \R [str]

    mysql 提示符重新配置为给定的字符串。本节后面将描述可以在提示符中使用的特殊字符序列。

    如果您在没有参数的情况下指定 prompt 命令,mysql 将提示符重置为默认值 mysql>

  • query_attributes name value [name value ...]

    定义应用于发送到服务器的下一个查询的查询属性。有关查询属性的用途和用法的讨论,请参见 Section 11.6, “Query Attributes”

    query_attributes 命令遵循以下规则

    • 属性名称和值的格式和引用规则与 delimiter 命令相同。

    • 该命令最多允许 32 个属性名称/值对。名称和值最多可以包含 1024 个字符。如果给出名称但没有给出值,则会发生错误。

    • 如果在执行查询之前发出多个 query_attributes 命令,则仅最后一个命令适用。发送查询后,mysql 会清除属性集。

    • 如果使用相同名称定义多个属性,则尝试检索属性值的结果将不确定。

    • 使用空名称定义的属性不能按名称检索。

    • 如果在 mysql 执行查询时发生重新连接,mysql 会在重新连接后恢复属性,以便可以使用相同的属性再次执行查询。

  • quit, \q

    退出 mysql

  • rehash, \#

    重新构建完成哈希表,以便在输入语句时启用数据库、表和列名称完成。(参见 --auto-rehash 选项的描述。)

  • resetconnection, \x

    重置连接以清除会话状态。这包括使用 query_attributes 命令清除任何当前定义的查询属性。

    重置连接的效果类似于 mysql_change_user() 或自动重新连接,不同之处在于连接不会关闭和重新打开,并且不会进行重新身份验证。参见 mysql_change_user()Automatic Reconnection Control

    此示例显示了 resetconnection 如何清除会话状态中维护的值

    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 |
    +------------------+
  • source file_name, \. file_name

    读取命名文件并执行其中包含的语句。在 Windows 上,将路径分隔符指定为 /\\

    引用字符被视为文件名本身的一部分。为了获得最佳效果,名称不应包含空格字符。

  • ssl_session_data_print [file_name]

    获取、序列化,并可选地存储成功连接的会话数据。可以给出可选的文件名和参数来指定要存储序列化会话数据的文件。如果省略,则会话数据将打印到 stdout

    如果 MySQL 会话配置为重用,则来自文件中的会话数据将被反序列化并提供给 connect 命令以重新连接。当会话成功重用时,status 命令包含一行显示 SSL session reused: true,而客户端保持重新连接到服务器。

  • status, \s

    提供有关连接和您正在使用的服务器的状态信息。如果您在启用 --safe-updates 的情况下运行,则 status 还会打印影响您的查询的 mysql 变量的值。

  • system command, \! command

    使用默认的命令解释器执行给定的命令。

  • tee [file_name], \T [file_name]

    通过在调用 mysql 时使用 --tee 选项,您可以记录语句及其输出。屏幕上显示的所有数据都将追加到给定的文件中。这对于调试也很有用。 mysql 在每个语句之后将结果刷新到文件中,就在它打印下一个提示之前。tee 功能仅在交互模式下有效。

    您可以使用 tee 命令以交互方式启用此功能。如果没有参数,则使用上一个文件。可以使用 notee 命令禁用 tee 文件。再次执行 tee 将重新启用日志记录。

  • use db_name, \u db_name

    db_name 用作默认数据库。

  • warnings, \W

    启用在每个语句之后显示警告(如果有)。

以下是一些关于 pager 命令的提示

  • 您可以使用它写入文件,并且结果仅写入文件

    mysql> pager cat > /tmp/log.txt

    您还可以为想要用作分页器的程序传递任何选项

    mysql> pager less -n -i -S
  • 在前面的示例中,请注意 -S 选项。您可能会发现它在浏览宽查询结果时非常有用。有时,非常宽的结果集很难在屏幕上阅读。less-S 选项可以使结果集更易于阅读,因为您可以使用左箭头键和右箭头键水平滚动它。您也可以在 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 在屏幕上显示结果。

您还可以组合 teepager 函数。启用 tee 文件并将 pager 设置为 less,您就可以使用 less 程序浏览结果,同时将所有内容追加到一个文件中。Unix teepager 命令一起使用与 mysql 内置的 tee 命令的区别在于,内置的 tee 即使您没有 Unix tee 也能正常工作。内置的 tee 还会记录屏幕上打印的所有内容,而 Unix teepager 一起使用时记录的内容要少一些。此外,您可以从 mysql 内部交互式地打开和关闭 tee 文件记录。当您想将某些查询记录到文件,但不记录其他查询时,这很有用。

命令 prompt 会重新配置默认的 mysql> 提示符。定义提示符的字符串可以包含以下特殊序列。

选项 描述
\C 当前连接标识符
\c 一个计数器,您发出每条语句时都会递增
\D 当前完整日期
\d 默认数据库
\h 服务器主机
\l 当前分隔符
\m 当前时间的分钟
\n 换行符
\O 当前月份,以三个字母表示(Jan、Feb、…)
\o 当前月份,以数字表示
\P am/pm
\p 当前 TCP/IP 端口或套接字文件
\R 当前时间,以 24 小时制表示(0–23)
\r 当前时间,标准 12 小时制表示(1–12)
\S 分号
\s 当前时间的秒数
\T 如果当前会话位于事务块内,则打印星号 (*)
\t 制表符
\U

您的完整 user_name@host_name 帐户名称

\u 您的用户名
\v 服务器版本
\w 当前星期几,以三个字母表示(Mon、Tue、…)
\Y 当前年份,四位数字
\y 当前年份,两位数字
\_ 空格
空格(反斜杠后面有一个空格)
\' 单引号
\" 双引号
\\ 文字 \ 反斜杠字符
\x

x,对于上面未列出的任何 x

您可以通过几种方式设置提示符

  • 使用环境变量。 您可以将 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>