运维家

V1

2022/07/17阅读:7主题:默认主题

mysql函数汇总之系统信息函数

mysql函数汇总之系统信息函数

mysql中的系统信息有数据库的版本号、当前用户名和连接数、系统字符集、最后一个自动生成的ID值等。

获取mysql版本号、连接数和数据库名的函数

varsion()返回指示mysql服务器版本的字符串。

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.29    |
+-----------+
1 row in set (0.00 sec)

mysql>

获取mysql连接数

connection_id()返回mysql服务器当前连接的次数,每个连接都有各自唯一的id

mysql> select connection_id();
+-----------------+
| connection_id() |
+-----------------+
|              24 |
+-----------------+
1 row in set (0.00 sec)

mysql>

PS:返回值根据登录的次数会有所不同。

获取mysql运行线程

show processlist:显示了有哪些线程在运行,不仅可以查看当前所有的连接数,还可以查看当前的连接状态,可以借此排查出有问题的sql语句等。

注意:

1、如果是root账户,能看到所有用户的当前连接。其他用户只能看到自己的。

2、show processlist只能列出100条,如果想看全部的话可以使用show full processlist命令。

mysql> show processlist;
+----+-----------------+-----------------+---------+---------+--------+------------------------+------------------+
| Id | User            | Host            | db      | Command | Time   | State                  | Info             |
+----+-----------------+-----------------+---------+---------+--------+------------------------+------------------+
|  5 | event_scheduler | localhost       | NULL    | Daemon  | 946721 | Waiting on empty queue | NULL             |
| 24 | root            | localhost:58414 | test_db | Query   |      0 | init                   | show processlist |
+----+-----------------+-----------------+---------+---------+--------+------------------------+------------------+
2 rows in set (0.01 sec)

mysql>

使用show processlist命令查出的结果各个字段的含义:

  • ID:用户登录mysql时,系统分配的是coeenction id
  • User:显示 当前用户;
  • Host:显示这个语句使用哪个IP的哪个端口上发出的,可以用来追踪出现问题语句的用户;
  • db:显示这个进程目前连接的是哪个数据库;
  • Command:显示当前连接执行的命令,一般取值为休眠(sleep)、查询(query)、连接(connect);
  • Time:显示这个状态持续的时间,单位是秒;
  • State:显示使用当前连接的sql语句的状态。state只是语句执行中的某一个状态。一个sql语句,以查询为例,可能需要经过copying to tmp table、sorting result、sending date等状态才可以完成;
  • Info:显示这个sql语句,是判断问题语句的一个重要依据。

查看使用utf8字符集的默认数据库名

mysql> select database(), schema();
+------------+----------+
| database() | schema() |
+------------+----------+
| test_db    | test_db  |
+------------+----------+
1 row in set (0.00 sec)

mysql>

获取用户名的函数

下面几个函数可以返回当前被mysql服务器验证的用户名和主机组合:

  • user()
  • current_user
  • current_user()
  • system_user()
  • session_user()
mysql> select user(), current_user, system_user();
+----------------+----------------+----------------+
| user()         | current_user   | system_user()  |
+----------------+----------------+----------------+
| root@localhost | root@localhost | root@localhost |
+----------------+----------------+----------------+
1 row in set (0.00 sec)

mysql>

返回的结果值显示了当前账户连接服务器时的用户名及连接的客户主机,规则为:当前登录的用户名@当前登录的主机。

获取字符串的字符集和排序方式的函数

charset(str)返回字符串str自变量的字符集;

mysql> select charset('yunweijia') as roll, charset(convert('abc' using latin1)) as roll_1, charset(version()) as roll_2;
+---------+--------+---------+
| roll    | roll_1 | roll_2  |
+---------+--------+---------+
| utf8mb3 | latin1 | utf8mb3 |
+---------+--------+---------+
1 row in set (0.00 sec)

mysql>

collation(str)返回字符串str的字符排列方式;

mysql> select collation('yunweijia') as coll, collation(convert('yunweijia' using latin1)) as coll_1;
+-----------------+-------------------+
| coll            | coll_1            |
+-----------------+-------------------+
| utf8_general_ci | latin1_swedish_ci |
+-----------------+-------------------+
1 row in set (0.00 sec)

mysql>

获取最后一个自动生成的ID值的函数

last_insert_id()函数返回最后生成的自动递增的值;

(1)首先我们需要创建一个表;

mysql> create table test_1 (id int auto_increment not null primary key, name varchar(100));
Query OK, 0 rows affected (0.05 sec)

mysql>

(2)向我们刚创建的表中插入几条数据;

mysql> insert into test_1 values(null, 'zhangsan'), (null, 'lisi'), (null, 'wangwu');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql>

(3)查看下表中数据;

mysql> select * from test_1;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | lisi     |
|  3 | wangwu   |
+----+----------+
3 rows in set (0.00 sec)

mysql>

(4)使用last_insert_id()查看最后自动生成的id值;

mysql> select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
|                1 |
+------------------+
1 row in set (0.00 sec)

mysql>

为什么会是1,而不是3呢?

继续往下看;

(5)再次插入数据;

mysql> insert into test_1 values (null, 'yunwei');
Query OK, 1 row affected (0.01 sec)

mysql> insert into test_1 values (null, 'yunweijia');
Query OK, 1 row affected (0.01 sec)

mysql> insert into test_1 values (null, '0909');
Query OK, 1 row affected (0.01 sec)

mysql>

(6)查看数据表内容

mysql> select * from test_1;
+----+-----------+
| id | name      |
+----+-----------+
|  1 | zhangsan  |
|  2 | lisi      |
|  3 | wangwu    |
|  4 | yunwei    |
|  5 | yunweijia |
|  6 | 0909      |
+----+-----------+
6 rows in set (0.00 sec)

mysql>

(7)查看auto_increment()的值

mysql> select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
|                6 |
+------------------+
1 row in set (0.00 sec)

mysql>

这是为什么呢?

这是因为第一次插入的三条数据,使用的是一条sql,使用last_insert_id()的使用,只返回这条sql获取的第一个auto_increment的值,即虽然插入了3条数据,但是他获取的仅仅是第一条数据插入时候的auto_increment的值,也就是1;

为什么返回6,是因为后来插入的三条数据是分别插入的,所以说每次获取的都是属于他自己的auto_increment,故而是返回了6。

小提示:

last_insert_id是和数据表无关的,如果向表test_1插入数据后再向表test_2插入数据,那么last_insert_id返回表test_2中的auto_increment的值。

至此,本文结束。

分类:

后端

标签:

后端

作者介绍

运维家
V1