【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客
《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com)
MySQL中的系统信息有数据库的版本号、当前用户名和连接数、系统字符集、最后一个自动生成的ID值等。本节将介绍常用的获取系统信息的函数。
4.6.1 获取MySQL版本号、连接数和数据库名的函数
VERSION()返回指示MySQL服务器版本的字符串。这个字符串使用utf8字符集。
【例4.89】查看当前MySQL版本号,SQL语句如下:
mysql> SELECT VERSION();
+--------------+
| VERSION() |
+--------------+
| 9.0.1 |
+--------------+
CONNECTION_ID()返回MySQL服务器当前连接的次数,每个连接都有各自唯一的ID。
【例4.90】查看当前用户的连接数,SQL语句如下:
mysql> SELECT CONNECTION_ID();
+--------------------------+
| CONNECTION_ID() |
+--------------------------+
| 23 |
+--------------------------+
这里返回23,返回值根据登录的次数会有所不同。
SHOW PROCESSLIST命令的输出结果显示有哪些线程正在运行,不仅可以查看当前所有的连接数,还可以查看当前的连接状态,帮助识别出有问题的查询语句等。
如果是root账号,则能看到所有用户的当前连接;如果是其他普通账号,则只能看到自己占用的连接。SHOW PROCESSLIST只列出前100条数据,如果想全部列出,可以使用SHOW FULL PROCESSLIST命令。
【例4.91】使用SHOW PROCESSLIST命令输出当前用户的连接信息,SQL语句如下:
MySQL> SHOW PROCESSLIST;
+--+---------------+---------------+----+-------+------+-----------------------+-----------
|Id|User | Host | db |Command| Time | State | Info
+--+---------------+---------------+----+-------+------+-----------------------+-----------
|4 |event_scheduler|localhost |NULL|Daemon |15274 | Waiting on empty queue|NULL
|23|root |localhost:58788|NULL|Query | 0 | starting |SHOW ROCESSLIST
+--+---------------+---------------+----+-------+------+-----------------------+-----------
各个列说明如下:
- ID列:用户登录MySQL时,系统分配的是"connection id"。
- User列:显示当前用户。如果不是root,那么这个命令只显示用户权限范围内的SQL语句。
- Host列:显示这个语句是从哪个IP的哪个端口上发出的,可以用来追踪出现问题语句的 用户。
- db列:显示这个进程目前连接的是哪个数据库。
- Command列:显示当前连接执行的命令,一般取值为休眠(Sleep)、查询(Query)、连接(Connect)。
- Time列:显示这个状态持续的时间,单位是秒。
- State列:显示使用当前连接的SQL语句的状态,是很重要的列。State只是语句执行中的某一个状态。一个SQL语句,以查询为例,可能需要经过Copying to tmp table、Sorting result、Sending data等状态才可以完成。后续会介绍所有状态。
- Info列:显示这个SQL语句,是判断问题语句的一个重要依据。
使用另一个命令行登录MySQL,此时将会有2个连接。在第二个登录的命令行下再次输入SHOW PROCESSLIST,结果如下:
mysql> SHOW PROCESSLIST;
+----+------+--------------+----+---------+--------+--------+----------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+--------------+----+---------+--------+--------+----------------+
| 1 | root |localhost:3602|NULL| Sleep | 38 | | NULL |
| 2 | root |localhost:3272|NULL| Query | 0 |NULL |show processlist|
+----+------+--------------+----+---------+--------+--------+----------------+
可以看到,当前活动用户为已登录的连接Id为2的用户,正在执行的Command(操作命令)是Query(查询),使用的查询命令为SHOW PROCESSLIST;而连接Id为1的用户目前没有对数据进行操作,即为Sleep操作,而且已经经过了38秒。
DATABASE()和SCHEMA()函数返回使用utf8字符集的默认(当前)数据库名。
【例4.92】查看当前使用的数据库,SQL语句如下:
mysql> SELECT DATABASE(),SCHEMA();
+----------------+----------------+
| DATABASE() | SCHEMA() |
+----------------+----------------+
| test_db | test_db |
+----------------+----------------+
可以看到,两个函数的作用相同。
4.6.2 获取用户名的函数
USER()、CURRENT_USER、CURRENT_USER()、SYSTEM_USER()和SESSION_USER()这几个函数返回当前被MySQL服务器验证的用户名和主机名组合。这个值用于确定当前登录用户在MySQL中的存取权限。一般情况下,这几个函数的返回值相同。
【例4.93】获取当前登录用户名称,SQL语句如下:
mysql> SELECT USER(), CURRENT_USER(), SYSTEM_USER();
+----------------+----------------+----------------+
| USER() | CURRENT_USER() | SYSTEM_USER() |
+----------------+----------------+----------------+
| root@localhost | root@localhost | root@localhost |
+----------------+----------------+----------------+
返回结果指示了当前账户连接服务器时的用户名及所连接的客户主机,root为当前登录的用户名,localhost为登录的主机名。