MySQL 函数简介——系统信息函数

MySQL 中的系统信息有数据库的版本号、当前用户名和连 接数、系统字符集、最后一个自动生成的 ID 值等 ,下面将介绍常用用的系统信息函数。

  1. 获取 MySQL 版本号、连接数和数据库名的函数 VERSION()返回指示 MySQL 服务器版本的字符串。这个字符串使用 utf8 字符集。 查看当前 MySQL 版本号,输入语句如下:

 SELECT VERSION();

CONNECTION_ID()返回 MySQL 服务器当前连接的次数,每个连接都有各自唯一的 ID。 查看当前用户的连接数,输入语句如下:

 SELECT CONNECTION_ID();

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

SHOW PROCESSLIST;SHOW FULL PROCESSLIST;

processlist 命令的输出结果显示了有哪些线程在运行,不仅可以查看当前所有的连接数,还可 以查看当前的连接状态、帮助识别出有问题的查询语句等。 如果是 root 账号,能看到所有用户的当前连接。如果是其他普通账号,则只能看到自己占用 的连接。show processlist 只列出前 100 条,如果想全部列出可使用 show full processlist 命令。 使用 SHOW PROCESSLIST 命令输出当前用户的连接信息,输入语句如下:

SHOW PROCESSLIST;

各个列的含义和用途: (1)Id 列,用户登录 MySQL 时,系统分配的是“connection id”。 (2)User 列,显示当前用户。如果不是 root,这个命令就只显示用户权限范围内的 SQL 语句。 (3)Host 列,显示这个语句是从哪个 IP 的哪个端口上发出的,可以用来追踪出现问题语句 的用户。 (4)db 列,显示这个进程目前连接的是哪个数据库。 (5)Command 列,显示当前连接执行的命令,一般取值为休眠(Sleep)、查询(Query)、 连接(Connect)。 (6)Time 列,显示这个状态持续的时间,单位是秒。 (7)State 列,显示使用当前连接的 SQL 语句的状态,很重要的列。后续会有所有状态的描 述,State 只是语句执行中的某一个状态。一个 SQL 语句,以查询为例,可能需要经过 Copying to tmp table、Sorting result、Sending data 等状态才可以完成。 (8)Info 列,显示这个 SQL 语句,是判断问题语句的一个重要依据。 使用另一个命令行登录 MySQL,此时将会有 2 个连接,在第 2 个登录的命令行下再次输入 SHOW PROCESSLIST

由结果可以看到,当前活动用户为登录的连接 Id 为 2 的用户,正在执行的 Command(操作命令)是 Query(查询),使用的查询命令为 SHOW PROCESSLIST;而连接 Id 为 1 的用户目前没有对数据 进行操作,即处于 Sleep 操作,而且已经经过了 38 秒。

DATABASE()和 SCHEMA()函数返回使用 utf8 字符集的默认(当前)数据库名。 查看当前使用的数据库,输入语句如下:

SELECT DATABASE(),SCHEMA();

可以看到,两个函数的作用相同。

  1. 获取用户名的函数 USER()、CURRENT_USER、CURRENT_USER()、SYSTEM_USER()和 SESSION_USER()这 几个函数返回当前被 MySQL 服务器验证的用户名和主机名组合。这个值符合确定当前登录用户存 取权限的 MySQL 账户。一般情况下,这几个函数的返回值是相同的。 获取当前登录用户名称,输入语句如下:

 SELECT USER(), CURRENT_USER(), SYSTEM_USER();

返回结果值指示了当前账户连接服务器时的用户名及所连接的客户主机,root 为当前登录的用 户名,localhost 为登录的主机名。

  1. 获取字符串的字符集和排序方式的函数 CHARSET(str)返回字符串 str 自变量的字符集。 使用 CHARSET()函数返回字符串使用的字符集,输入语句如下:

 SELECT CHARSET('abc'), CHARSET(CONVERT('abc' USING latin1)),CHARSET(VERSION()); 

CHARSET('abc')返回系统默认的字符集 utf8;CHARSET(CONVERT('abc' USING latin1))返回 的字符集为 latin1;前面介绍过,VERSION()返回的字符串使用 utf8 字符集,因此 CHARSET 返回 结果为 utf8。 COLLATION(str)返回字符串 str 的字符排列方式。 使用 COLLATION()函数返回字符串排列方式,输入语句如下:

 SELECT COLLATION('abc'),COLLATION(CONVERT('abc' USING utf8));

可以看到,使用不同字符集时字符串的排列方式不同。

  1. 获取最后一个自动生成的 ID 值的函数 LAST_INSERT_ID()函数返回最后生成的 AUTO_INCREMENT 值。 使用 SELECT LAST_INSERT_ID 查看最后一个自动生成的列值。 (1)一次插入一条记录 首先创建表 worker,其 Id 字段带有 AUTO_INCREMENT 约束,输入语句如下:

 CREATE TABLE worker (Id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, Name VARCHAR(30));

分别单独向表 worker 中插入两条记录:

查看已经插入的数据可以发现,最后一条插入的记录的 Id 字段值为 2,使用 LAST_INSERT_ID() 查看最后自动生成的 Id 值:

 SELECT LAST_INSERT_ID();

可以看到,一次插入一条记录时,返回值为最后一条插入记录的 Id 值。 (2)一次同时插入多条记录 接下来,向表中插入多条记录,输入语句如下:

INSERT INTO worker VALUES(NULL, 'Kevin'),(NULL,'Michal'),(NULL,'Nick');

查询已经插入的记录:

 SELECT * FROM worker;

可以看到最后一条记录的 Id 字段值为 5,使用 LAST_INSERT_ID()查看最后自动生成的 Id 值:

SELECT LAST_INSERT_ID(); 

结果显示,LAST_INSERT_ID 值不是 5 而是 3,这是为什么呢?在向数据表中插入一条新记 录时,LAST_INSERT_ID()返回带有 AUTO_INCREMENT 约束的字段最新生成的值 2;继续向表 中同时添加 3 条记录,读者可能以为这时 LAST_INSERT_ID 值为 5,可显示结果却为 3,这是因 为当使用一条INSERT语句插入多行时,LAST_INSERT_ID()只返回插入的第一行数据时产生的值, 在这里为第 3 条记录。之所以这样,是因为这使依靠其他服务器复制同样的 INSERT 语句变得简 单。

提 示 :LAST_INSERT_ID 是与数据表无关的,如果向表 a 插入数据后再向表 b 插入数据,那么 LAST_INSERT_ID 返回表 b 中的 Id 值。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值