返回文章列表

【MySQL】用户自定义变量

2024年8月16日
MySQL

使用用户自定义变量

简介

自定义变量是容易被遗忘的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) );