MySQL系统信息函数
1、获取MySQL版本号、连接数和数据库名的函数
(1)version()
version()返回指示MySQL服务器版本的字符串,这个字符串使用utf8字符集。
【例】查看当前MySQL版本号,SQL语句如下:
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.16 |
+-----------+
1 row in set (0.05 sec)
(2)connection_id()
connection_id()返回MySQL服务器当前连接的次数,每个连接都有各自唯一的ID。
【例】查看当前用户的连接数,SQL语句如下:
mysql> select connection_id();
+-----------------+
| connection_id() |
+-----------------+
| 18 |
+-----------------+
1 row in set (0.05 sec)
(3)show processlist 和 show full processlist
processlist 命令的输出结果显示有哪些线程在运行,不仅可以查看当前所有的连接数,还可以查看当前的连接状态,帮助识别出有问题的查询语句等。
如果是root账号,就能看到所有用户的当前连接,如果是其他普通账号,则只能看到自己占用的连接。show processlist只列出 前100条,如果想全部列出可使用show full processlist命令。
【例】使用showprocesslist命令输出当前用户的连接信息,SQL语句如下:
mysql> show processlist;
+----+-----------------+-----------------+---------+---------+--------+------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-----------------+-----------------+---------+---------+--------+------------------------+------------------+
| 4 | event_scheduler | localhost | NULL | Daemon | 381487 | Waiting on empty queue | NULL |
| 18 | root | localhost:60272 | company | Query | 0 | starting | show processlist |
+----+-----------------+-----------------+---------+---------+--------+------------------------+------------------+
2 rows in set (0.05 sec)
各个列的含义:
列 | 含义 |
---|---|
id | 用户登录MySQL时,系统分配的"connection id" |
User | 显示当前用户,如果不是root,就显示用户权限范围内的MySQL语句 |
Host | 显示这个语句是从哪个IP的哪个端口上发出的,可以用来追踪出现问题语句的用户 |
db | 显示这个进程目前连接的是哪个数据库 |
Command | 显示当前连接的执行命令,一般取值为休眠(sleep)、查询(Query)、连接(Connect) |
Time | 显示这个状态持续的时间,单位是秒 |
State | 显示使用当前连接的SQL语句的状态,State只是语句执行中的某一个状态 |
Info | 显示这个SQL语句,是判断问题语句的一个重要语句 |
(4)database() 、schema()
【例】查看当前使用的数据库,SQL语句如下:
mysql> select database(),schema();
+------------+----------+
| database() | schema() |
+------------+----------+
| company | company |
+------------+----------+
1 row in set (0.00 sec)
2、获取用户名的函数
user()、current_user()、system_user()、session_user()
这几个函数返回当前被MySQL服务器验证的用户名和主机名组合。这个值符合确定当前登录用户存取权限的MySQL账户。
【例】获取当前登录用户名称,SQL语句如下:
返回结果值显示了当前账户连接服务器时的用户名及所连接的客户主机,root为当前登录的用户名,localhost为登录的主机名。
mysql> select user(),current_user,system_user();
+----------------+----------------+----------------+
| user() | current_user | system_user() |
+----------------+----------------+----------------+
| root@localhost | root@localhost | root@localhost |
+----------------+----------------+----------------+
1 row in set (0.05 sec)
3、获取字符串的字符集和排序方式的函数
(1)charset(str)
【例】使用charset()函数返回字符串使用的字符集,SQL语句如下:
mysql> select charset('abc'),
-> charset(convert('abc' USING latin1 ) ),
-> charset(version());
+----------------+----------------------------------------+--------------------+
| charset('abc') | charset(convert('abc' USING latin1 ) ) | charset(version()) |
+----------------+----------------------------------------+--------------------+
| gbk | latin1 | utf8 |
+----------------+----------------------------------------+--------------------+
1 row in set (0.00 sec)
(2)collation(str)
【例】使用collation()函数返回字符串排列方式,SQL语句如下:
mysql> select collation('abc'),collation(convert('abc' USING utf8 ));
+------------------+---------------------------------------+
| collation('abc') | collation(convert('abc' USING utf8 )) |
+------------------+---------------------------------------+
| gbk_chinese_ci | utf8_general_ci |
+------------------+---------------------------------------+
1 row in set, 1 warning (0.05 sec)
4、获取最后一个自动生成的ID值的函数
select last_insetr_id
【例】使用select last_insetr_id查看最后一个自动生成的列值,执行过程如下:
(1)一次插入一条记录
首先创建表worker,其id字段带有auto_increment约束,SQL语句如下:
mysql> create table worker
-> (
-> id int auto_increment not null primary key,
-> Name varchar(30)
-> );
Query OK, 0 rows affected (0.21 sec)
分别单独向表worker中插入两条记录:
mysql> insert into worker values(null,'jimy');
Query OK, 1 row affected (0.07 sec)
mysql> insert into worker values(null,'Tom');
Query OK, 1 row affected (0.05 sec)
mysql> select * from worker;
+----+------+
| id | Name |
+----+------+
| 1 | jimy |
| 2 | Tom |
+----+------+
2 rows in set (0.00 sec)
查看已经插入的数据,发现最后一条插入的记录的id字段值为2,使用last_insert_id()查看最后自动生成的id值:
mysql> select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
| 2 |
+------------------+
1 row in set (0.05 sec)
可以看到,一次插入一条记录时,返回值为最后一条插入记录的id值。
(2)一次同时插入多条记录
向表中插入多条记录:
mysql> insert into worker values
-> (null,'Kevin'),
-> (null,'Michal'),
-> (null,'NICK');
Query OK, 3 rows affected (0.05 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM WORKER;
+----+--------+
| id | Name |
+----+--------+
| 1 | jimy |
| 2 | Tom |
| 3 | Kevin |
| 4 | Michal |
| 5 | NICK |
+----+--------+
5 rows in set (0.00 sec)
使用last_insert_id查看最后自动生成的id值:
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 3 |
+------------------+
1 row in set (0.00 sec)
使用一条insert语句插入多个行时,last_insert_id()只返回插入的第一行数据时产生的值,在这里为插入第3条记录。之所以这样是因为这使依靠其他服务器复制同样的insert语句变得简单。
提示:
last_insert_id是与table无关的,先向表a插入数据,再向表b插入数据,last_insert_id返回表b中的id值。