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

VERSION()返回指示MySQL服务器版本的字符串。这个字符串使用utf8字符集。

例:查看当前MySQL版本号,SQL语句如下:


执行后得:


CONNECTION_ID()返回MySQL服务器当前连接的次数,每个连接都有各自唯一的ID。

例:查看当前用户的链接数,SQL语句如下:


执行后得:


SHOW PROCESSLIST;SHOW FULL PROCESSLIST;

processlist命令的输出结果显示了有哪些线程在运行,不仅可以查看当前所有有连接数,还可以查看当前的连接状态,帮助识别出有问题的查询语句等。

如果中root账号,能看到所有用户的当前连接。如果是其他普通帐号,则只能看到自己占用的连接。Show processlist;只列出前100条,如果想全部列出可使用show full processlist命令。

例:使用SHOW PROCESSLIST命令输出当前用户连接信息,SQL语句如下:


执行后得:


各个列的含义和用途:

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字符集的默认(当前)数据库名。

例:查看当前使用的数据库,SQL语句如下:


执行后得:


两个函数作用相同。

2、获取用户名的函数

USER(),CURRENT_USER(),SYSTEM_USER()和SESSION_USER()这几个函数返回当前被MySQL服务器验证的用户和主机名组合。这个值符合确定当前登录用户存取权限的MySQL帐户。一般情况下,这几个函数的返回值是相同的。

例:获取当前登陆用户名称,SQL语句如下:


执行后得:


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

3、获取字符串的字符集和排序方法的函数

CHARSET(str)返回字符串str自变量的字符集。

例:使用CHARSET()函数返回字符串使用的字符集,SQL语句如下:


执行后得:


COLLATION(str)返回字符串str的字符排列方式。

例:使用COLLATION()函数返回字符串排列方式,SQL语句如下:


执行后得:


使用不同字符集时字符串的排列方式不同。

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

LAST_INSERT_ID()自动返回最后一个INSERT或UPDATE为AUTO_INCREMENT列设置的第一个发生的值。

例:使用SELECT LAST_INSERT_ID查看最后一个自动生成的列值,执行过程如下:

1)一次插入一条记录

首先创建表worker,其Id字段带有AUTO_INCREMENT约束,SQL语句如下:


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


数据表显示数据条数:


再执行SELECT LAST_INSERT_ID();命令(最好在MySQL控制台创建表、插入数据,再执行LAST_INSERT_ID()命令):


2)一次同时插入多条记录

一次向表里插入多条记录,输入sql语句如下:


查询worker表:


可以看到最后一条记录的Id是5。

再执行SELECT LAST_INSERT_ID();命令:


结果LAST_INSERT_ID值不是5 是3。这是因为当使用一条INSERT语句插入多条数据里,LAST_INSERT_ID()只返回当前插入的数据的值。

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