信息函数
TiDB 支持使用 MySQL 8.0 中提供的大部分信息函数。
TiDB 支持的 MySQL 信息函数
| 函数名 | 功能描述 |
|---|---|
| BENCHMARK() | 循环执行一个表达式 |
| CONNECTION_ID() | 返回当前连接的连接 ID(线程 ID) |
| CURRENT_ROLE() | 返回当前连接的角色 |
| CURRENT_USER(), CURRENT_USER | 返回当前用户的用户名和主机名 |
| DATABASE() | 返回默认(当前)的数据库 |
| FOUND_ROWS() | 该函数对于一个包含 LIMIT 的 SELECT 查询语句,返回在不包含 LIMIT 的情况下的记录数 |
| LAST_INSERT_ID() | 返回上一条 INSERT 语句中自增列的值 |
| ROW_COUNT() | 影响的行数 |
| SCHEMA() | 与 DATABASE() 同义 |
| SESSION_USER() | 与 USER() 同义 |
| SYSTEM_USER() | 与 USER() 同义 |
| USER() | 返回客户端提供的用户名和主机名 |
| VERSION() | 返回当前 MySQL 服务器的版本信息 |
BENCHMARK()
BENCHMARK() 函数可以按照指定的次数重复执行给定的表达式。
语法:
1. BENCHMARK(count, expression)
count:要执行表达式的次数。expression:要重复执行的表达式。
示例:
1. SELECT BENCHMARK(5, SLEEP(2));
1. +------------------------+
2. | BENCHMARK(5, SLEEP(2)) |
3. +------------------------+
4. | 0 |
5. +------------------------+
6. 1 row in set (10.00 sec)
CONNECTION_ID()
CONNECTION_ID() 函数返回连接的 ID。根据 TiDB 的 enable-32bits-connection-id 配置项的值不同,该函数将返回一个 32 位或 64 位的连接 ID。
如果启用了 enable-global-kill,连接的 ID 可用于在同一集群的多个 TiDB 实例中终止查询。
1. SELECT CONNECTION_ID();
1. +-----------------+
2. | CONNECTION_ID() |
3. +-----------------+
4. | 322961414 |
5. +-----------------+
6. 1 row in set (0.00 sec)
CURRENT_ROLE()
CURRENT_ROLE() 函数返回当前会话的当前角色。
1. SELECT CURRENT_ROLE();
1. +----------------+
2. | CURRENT_ROLE() |
3. +----------------+
4. | NONE |
5. +----------------+
6. 1 row in set (0.00 sec)
CURRENT_USER()
CURRENT_USER() 函数返回当前会话中使用的账户。
1. SELECT CURRENT_USER();
1. +----------------+
2. | CURRENT_USER() |
3. +----------------+
4. | root@% |
5. +----------------+
6. 1 row in set (0.00 sec)
DATABASE()
DATABASE() 函数返回当前会话正在使用的数据库名。
1. SELECT DATABASE();
1. +------------+
2. | DATABASE() |
3. +------------+
4. | test |
5. +------------+
6. 1 row in set (0.00 sec)
FOUND_ROWS()
FOUND_ROWS() 函数返回上一条执行的 SELECT 语句的结果集中的行数。
1. SELECT 1 UNION ALL SELECT 2;
1. +------+
2. | 1 |
3. +------+
4. | 2 |
5. | 1 |
6. +------+
7. 2 rows in set (0.01 sec)
1. SELECT FOUND_ROWS();
1. +--------------+
2. | FOUND_ROWS() |
3. +--------------+
4. | 2 |
5. +--------------+
6. 1 row in set (0.00 sec)

注意
SQL_CALC_FOUND_ROWS 查询修饰符用于计算在没有 LIMIT 子句的情况下结果集中的总行数,只有在启用了 tidb_enable_noop_functions 时才能使用。从 MySQL 8.0.17 开始,该查询修饰符已废弃。建议使用 COUNT(*) 代替。
LAST_INSERT_ID()
LAST_INSERT_ID() 函数返回包含 AUTO_INCREMENT 或 AUTO_RANDOM 列的表中最后插入行的 ID。
1. CREATE TABLE t1(id SERIAL);
2. Query OK, 0 rows affected (0.17 sec)
4. INSERT INTO t1() VALUES();
5. Query OK, 1 row affected (0.03 sec)
7. INSERT INTO t1() VALUES();
8. Query OK, 1 row affected (0.00 sec)
10. SELECT LAST_INSERT_ID();
11. +------------------+
12. | LAST_INSERT_ID() |
13. +------------------+
14. | 3 |
15. +------------------+
16. 1 row in set (0.00 sec)
18. TABLE t1;
19. +----+
20. | id |
21. +----+
22. | 1 |
23. | 3 |
24. +----+
25. 2 rows in set (0.00 sec)

注意
- 在 TiDB 中,AUTO_ID_CACHE 可能会导致该函数的返回结果与 MySQL 不同。这是因为 TiDB 在每个节点上都会各自缓存 ID,这可能导致分配的 ID 出现无序或间隔。如果你的应用程序依赖于严格的 ID 顺序,可以启用 MySQL 兼容模式。
- 在以上示例中,ID 是以 2 递增的,而 MySQL 在相同场景中生成的 ID 是以 1 递增的。关于兼容性的更多信息,请参见自增 ID。
ROW_COUNT()
ROW_COUNT() 函数返回受影响的行数。
1. CREATE TABLE t1(id BIGINT UNSIGNED PRIMARY KEY AUTO_RANDOM);
2. Query OK, 0 rows affected, 1 warning (0.16 sec)
4. INSERT INTO t1() VALUES (),(),();
5. Query OK, 3 rows affected (0.02 sec)
6. Records: 3 Duplicates: 0 Warnings: 0
8. SELECT ROW_COUNT();
9. +-------------+
10. | ROW_COUNT() |
11. +-------------+
12. | 3 |
13. +-------------+
14. 1 row in set (0.00 sec)
SCHEMA()
SCHEMA() 函数与 DATABASE() 同义。
SESSION_USER()
SESSION_USER() 函数与 USER() 同义。
SYSTEM_USER()
SYSTEM_USER() 函数与 USER() 同义。
USER()
USER() 函数返回当前连接的用户。该函数的输出可能与 CURRENT_USER() 的输出略有不同,因为 USER() 显示的是实际 IP 地址,而不是通配符。
1. SELECT USER(), CURRENT_USER();
1. +----------------+----------------+
2. | USER() | CURRENT_USER() |
3. +----------------+----------------+
4. | root@127.0.0.1 | root@% |
5. +----------------+----------------+
6. 1 row in set (0.00 sec)
VERSION()
VERSION() 函数以与 MySQL 兼容的格式返回 TiDB 版本。如需获取更详细的版本信息,可以使用 TIDB_VERSION() 函数。
1. SELECT VERSION();
2. +--------------------+
3. | VERSION() |
4. +--------------------+
5. | 8.0.11-TiDB-v7.5.1 |
6. +--------------------+
7. 1 row in set (0.00 sec)
1. SELECT TIDB_VERSION()\G
2. *************************** 1. row ***************************
3. TIDB_VERSION(): Release Version: v7.5.1
4. Edition: Community
5. Git Commit Hash: 7d16cc79e81bbf573124df3fd9351c26963f3e70
6. Git Branch: heads/refs/tags/v7.5.1
7. UTC Build Time: 2024-02-27 14:28:32
8. GoVersion: go1.21.6
9. Race Enabled: false
10. Check Table Before Drop: false
11. Store: tikv
12. 1 row in set (0.00 sec)
以上示例来自 TiDB v7.5.1,它会将自身标识为 MySQL 8.0.11。
如需更改该函数返回的版本,可以修改 server-version 配置项。
TiDB 特有的信息函数
下列函数为 TiDB 中特有的信息函数,MySQL 中无对应的函数。
| 函数名 | 功能描述 |
|---|---|
| CURRENT_RESOURCE_GROUP() | 返回当前连接的资源组名 |
TiDB 不支持的信息函数
CHARSET()COERCIBILITY()COLLATION()ICU_VERSION()ROLES_GRAPHML()
