暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

运维家 2022-07-17
705

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
的值。

至此,本文结束。

 

长按以识别二维码关注运维家~
微信号:yunweijia0909


往期推荐

mysql函数汇总之条件判断函数

mysql函数汇总之日期和时间函数

mysql函数汇总之字符串函数


文章转载自运维家,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论