MySQL 函数和运算符:信息函数
信息函数:
Name | Description | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BENCHMARK() | 重复执行一个表达式
“BENCHMARK(count,expr)”:重复执行“expr”“count”次。它可以用来计时 MySQL 处理表达式的速度。对于不适当的参数(例如NULL或负重复计数),结果值是 0 或 NULL。 预期用途来自mysqlClient 端,该 Client 端报告查询执行时间: mysql> SELECT BENCHMARK(1000000,AES_ENCRYPT('hello','goodbye'));
+---------------------------------------------------+
| BENCHMARK(1000000,AES_ENCRYPT('hello','goodbye')) |
+---------------------------------------------------+
| 0 |
+---------------------------------------------------+
1 row in set (4.74 sec)
BENCHMARK()的使用因此通过赋予该组件更多的权重并消除网络,解析器,优化器等引入的影响来衡量该组件的性能。 | ||||||||||||||||||||||||
CHARSET() | 返回参数的字符集
“CHARSET(str)”:返回字符串参数的字符集。 mysql> SELECT CHARSET('abc');
-> 'latin1'
mysql> SELECT CHARSET(CONVERT('abc' USING utf8));
-> 'utf8'
mysql> SELECT CHARSET(USER());
-> 'utf8'
| ||||||||||||||||||||||||
COERCIBILITY() | 返回字符串参数的排序规则强制性值
“COERCIBILITY(str)”:返回字符串参数的排序规则强制性值。【较低的值具有较高的优先级】 mysql> SELECT COERCIBILITY('abc' COLLATE latin1_swedish_ci);
-> 0
mysql> SELECT COERCIBILITY(USER());
-> 3
mysql> SELECT COERCIBILITY('abc');
-> 4
mysql> SELECT COERCIBILITY(1000);
-> 5
返回值的含义如下:
| ||||||||||||||||||||||||
COLLATION() | 返回字符串参数的排序规则
“COLLATION(str)”:返回字符串参数的排序规则。 mysql> SELECT COLLATION('abc');
-> 'latin1_swedish_ci'
mysql> SELECT COLLATION(_utf8'abc');
-> 'utf8_general_ci'
| ||||||||||||||||||||||||
CONNECTION_ID() | 返回连接的连接 ID(线程 ID)
mysql> SELECT CONNECTION_ID();
-> 23786
| ||||||||||||||||||||||||
CURRENT_USER(), CURRENT_USER | 经过身份验证的用户名和主机名
触发器和事件没有定义“SQL SECURITY”特性的选项,因此对于这些对象,“CURRENT_USER()”返回定义该对象的用户的帐户。要返回调用者,请使用“USER()”或“SESSION_USER()”。 | ||||||||||||||||||||||||
DATABASE() | 返回默认(当前)数据库名称
mysql> SELECT DATABASE();
-> 'test'
| ||||||||||||||||||||||||
FOUND_ROWS() | 对于带有 LIMIT 子句的 SELECT,如果没有 LIMIT 子句,则将返回的行数【???】
“SELECT”语句可以包含“LIMIT”子句以限制服务器返回给 Client 端的行数。在某些情况下,希望知道该语句在没有“LIMIT”的情况下将返回多少行,而无需再次运行该语句。要获得此行计数,请在“SELECT”语句中包含“SQL_CALC_FOUND_ROWS”【???】选项,然后再调用FOUND_ROWS(): mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
-> WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();
第二个SELECT返回一个数字,该数字指示如果不使用LIMIT子句写入第一个SELECT将会返回多少行。
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM ... ;
mysql> SET @rows = FOUND_ROWS();
SQL_CALC_FOUND_ROWS对于UNION的意图是,它应返回没有全局LIMIT时将返回的行数。【???】 将SQL_CALC_FOUND_ROWS与UNION一起使用的条件是:
除了此处描述的情况外,FOUND_ROWS()的行为是不确定的(例如,在SELECT语句后由于错误而失败的值)。 | ||||||||||||||||||||||||
LAST_INSERT_ID() | 最后一个 INSERT 的 AUTOINCREMENT 列的值
mysql> SELECT LAST_INSERT_ID();
-> 195
mysql> USE test;
mysql> SELECT @@innodb_autoinc_lock_mode;
+----------------------------+
| @@innodb_autoinc_lock_mode |
+----------------------------+
| 1 |
+----------------------------+
mysql> CREATE TABLE `t` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`val` INT(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `i1` (`val`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
# Insert two rows
mysql> INSERT INTO t (val) VALUES (1),(2);
# With auto_increment_offset=1, the inserted rows
# result in an AUTO_INCREMENT value of 3
mysql> SHOW CREATE TABLE t\G
*************************** 1. row ***************************
Table: t
Create Table: CREATE TABLE `t` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`val` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `i1` (`val`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1
# LAST_INSERT_ID() returns the first automatically generated
# value that is successfully inserted for the AUTO_INCREMENT column
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 1 |
+------------------+
# The attempted insertion of duplicate rows fail but errors are ignored
mysql> INSERT IGNORE INTO t (val) VALUES (1),(2);
Query OK, 0 rows affected (0.00 sec)
Records: 2 Duplicates: 2 Warnings: 0
# With innodb_autoinc_lock_mode=1, the AUTO_INCREMENT counter
# is incremented for the ignored rows
mysql> SHOW CREATE TABLE t\G
*************************** 1. row ***************************
Table: t
Create Table: CREATE TABLE `t` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`val` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `i1` (`val`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
# The LAST_INSERT_ID is unchanged because the previous insert was unsuccessful
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 1 |
+------------------+
| ||||||||||||||||||||||||
ROW_COUNT() | 更新的行数
ROW_COUNT()返回的值如下:
mysql> INSERT INTO t VALUES(1),(2),(3);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT ROW_COUNT();
+-------------+
| ROW_COUNT() |
+-------------+
| 3 |
+-------------+
1 row in set (0.00 sec)
mysql> DELETE FROM t WHERE i IN(1,2);
Query OK, 2 rows affected (0.00 sec)
mysql> SELECT ROW_COUNT();
+-------------+
| ROW_COUNT() |
+-------------+
| 2 |
+-------------+
1 row in set (0.00 sec)
| ||||||||||||||||||||||||
SCHEMA() | DATABASE()的同义词 | ||||||||||||||||||||||||
SESSION_USER() | USER()的同义词 | ||||||||||||||||||||||||
SYSTEM_USER() | USER()的同义词 | ||||||||||||||||||||||||
USER() | Client 端提供的用户名和主机名
mysql> SELECT USER();
-> 'davida@localhost'
| ||||||||||||||||||||||||
VERSION() | 返回指示 MySQL 服务器版本的字符串
mysql> SELECT VERSION();
-> '5.7.32-standard'
|