使用用户自定义变量
简介
自定义变量是容易被遗忘的MySQL特性,但如果能够用好,发挥其潜力,在某些场景下可以写出非常高效的查询语句。自定义变量是一个用来存储内容的临时容器。先来了解属性和限制:
- 使用自定义变量的查询,无法使用查询缓存。
- 不能再使用常量或者标识符的地方使用自定义变量,例如表名、列名和
LIMIT
字句中。 - 自定义变量在连接MySQL的整个过程中都存在,所以如果有连接池或者持久化连接的情况下需要注意变量的使用。
- 在5.0之前的版本,是大小写敏感的。
- 赋值符号
:=
的优先级非常低,所以赋值表达式应该使用明确的括号。 - 使用未定义变量不会产生任何语法错误。
统计更新和插入的数量
当使用了INSERT ON DUPLICATE KEY UPDATE
的时候,如果想知道到底插入了多少行数据,多少数据改写为更新操作,可以使用变量来实现:
mysql> SET @x := 0;
mysql> INSERT INTO t1(c1, c2) VALUES(4, 4), (2, 1), (3, 1)
ON DUPLICATE KEY UPDATE
c1 = VALUES(c1) + ( 0 * (@x := @x + 1) );