文章目录

  • 1. 名称
  • 2. 语法
  • 3. 描述
  • 4. 选项


1. 名称

mysql:MySQL数据库的命令行客户端。

2. 语法

mysql [ options ] $db_name

3. 描述

mysql 是一个简单的 SQL shell ,该 shell 具有输入行编辑功能。 mysql 支持交互和非交互两种使用方式。在交互模式下,查询的结果以 ASCII 码的形式展示。在非交互模式下,查询的结果以制表符分割,当然输出格式也可以通过命令选项具体指定。

如果你在查询大数据集时遇到内存不足的问题,你可以使用 --quick 这一选项。该选项不会在展示前一次性获取所有的结果集并放到内存中;相反,该选项强制 mysql 一次性只从服务端获取一行数据。

使用 mysql 命令也非常简单,可以在命令行中通过下列方式使用:

shell> mysql $db_name

或者:

shell> mysql --user=$user_name --password $db_name
Enter password: $your_password

接着,你可以在后面接着写所需进行操作的 SQL 语句:

[root@centos ~]# mysql --user=root --password --database=mysql -t -e "select * from help_keyword limit 5;" > output.txt
Enter password: 
[root@centos ~]# cat output.txt 
+-----------------+-------------+
| help_keyword_id | name        |
+-----------------+-------------+
|             226 | (JSON       |
|             227 | ->          |
|             229 | ->>         |
|              46 | <>          |
|             637 | ACCOUNT     |
+-----------------+-------------+

如果你想执行在脚本文件中的SQL语句,你可以像下面命令这么做:

shell> mysql $db_name < script.sql > output.tab
Enter password: $your_password

4. 选项

  • --auto-vertical-output

使用该选项后,如果结果集的显示超过了当前窗口的大小,则以垂直的方式来显示结果集;否则,还是通过表格的方式进行结果集展示。

  • --batch 等价于 -B

打印结果时使用制表符作为列分隔符。使用这个选项时, mysql 命令不使用历史文件(history file),例如:

[root@centos ~]# mysql --user=root --password --database=mysql --batch -e "select * from help_keyword limit 5;"
Enter password: 
help_keyword_id name
226     (JSON
227     ->
229     ->>
46      <>
637     ACCOUNT
  • --bind-address=ip_address

在一台有多张网卡的电脑上,则可以通过该选项指定使用哪一个网卡来连接到 MySQL 服务器。

  • --database=db_name 等价于 -Ddb_name

用于指定所使用的数据库名称。

  • --delimiter=str

设置语句的分隔符,默认为 ;

  • --execute=statement 等价于 -e statement

执行完语句 statement 后退出,默认的输出格式和指定选项 --batch 时一致。

关于上述该选项使用案例可见脚本 sql_test.sh 中的第51、53和54行。

  • --html 等价于 -H

表示以 HTML 格式输出结果集,例如:

[root@centos ~]# mysql --user=root --password --database=mysql --html -t -e "select * from help_keyword limit 5;"
Enter password: 
<TABLE BORDER=1><TR><TH>help_keyword_id</TH><TH>name</TH></TR><TR><TD>226</TD><TD>(JSON</TD></TR><TR><TD>227</TD><TD>-></TD></TR><TR><TD>229</TD><TD>->></TD></TR><TR><TD>46</TD><TD><></TD></TR><TR><TD>637</TD><TD>ACCOUNT</TD></TR></TABLE>
  • --host=host_name 等价于 -hhost_name

表示 MySQL 服务端所在机器的 IP 地址。

  • --init-command=str

指定连接至 MySQL 服务器之后所需执行的 SQL 语句。

  • --max-allowed-packet=value

MySQL 的客户端和服务端之间通讯时缓冲区的最大值,默认 16MB , 最大 1GB 。

  • --password[=password] 等价于 -p[password]

如果希望不指定密码且不希望收到输入密码的提示,可使用 --skip-password 选项。

  • --port=port_num 等价于 -Pport_num

指定连接服务器时使用的端口号。

  • --prompt=format_str

将客户端的命令行提示符设置为 format_str ,默认是 mysql>

[root@centos ~]# mysql --prompt='upmysql>'
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.21 Source distribution

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

upmysql>
  • --skip-column-names 等价于 -N

不将列名称写入结果中。例如:

[root@centos ~]# mysql --user=root --password --database=mysql -N -e "select * from help_keyword limit 5;"
Enter password: 
+-----+---------+
| 226 |   (JSON |
| 227 |      -> |
| 229 |     ->> |
|  46 |      <> |
| 637 | ACCOUNT |
+-----+---------+
  • --table 等价于 -t

以表格的形式显示输出。这是交互式使用方式的默认选项,但是也可以在批量的模式下用于指定输出的显示方式。

关于该选项的使用案例,在【MySQL数据库入门】安装MySQL示例数据库中
mysql -t < employees.sql 命令就是该选项在 mysql 命令非交互式使用下展示输出的一种方式。

  • --xml 等价于 -X

以 XML 的格式显示查询结果,例如:

[root@centos ~]# mysql --user=root --database=mysql --xml -t -e "select * from help_keyword limit 5;"
<?xml version="1.0"?>

<resultset statement="select * from help_keyword limit 5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <row>
        <field name="help_keyword_id">226</field>
        <field name="name">(JSON</field>
  </row>

  <row>
        <field name="help_keyword_id">227</field>
        <field name="name">-">></field>
  </row>

  <row>
        <field name="help_keyword_id">229</field>
        <field name="name">-">>">></field>
  </row>

  <row>
        <field name="help_keyword_id">46</field>
        <field name="name"><">></field>
  </row>

  <row>
        <field name="help_keyword_id">637</field>
        <field name="name">ACCOUNT</field>
  </row>
</resultset>

在 Linux 的命令行中执行 sql 脚本,然后将结果输出重定向至某脚本下:

mysql -h $host -P $port -u $user -D $dbname -p -t < script.sql > result.txt

未完待续…