自定义变量指的是用户可以根据自身需求通过SQL语句将值存储在自定义的变量中,然后该变量可以被其他SQL语句引用。通过这种方式既可以实现值的传递,又可以简化SQL的编写。

使用指南

用户自定义的变量形式为:@varname,其中变量名称由字母、数字、“.”、“”、“¥”、“$”组成。不过,在以字符串或者标识符引用时也可以包含其他字符(例如:@`var-name`),不支持纯数字和单独“.”的变量。

语法

用户自定义变量可以通过set语句定义

  1. SET @var_name = expr [, @var_name = expr ...];

也可以使用:= 用作赋值运算符

  1. SET @var_name := expr [, @var_name = expr ...];
  • 声明自定义变量时,必须加前缀 @;
  • 可同时声明多个自定义变量,多个变量之间用逗号 (,) 隔开;
  • 支持多次声明同一自定义变量,新声明的值会覆盖原有值;
  • expr暂不支持表达式;
  • 如在一个 SQL 语句中引用了没有声明过的变量,该变量值默认为 NULL 且为 STRING 类型;

读取用户自定义变量可以通过select语句查询

  1. SELECT @var_name [, @var_name ...];

使用限制

  • 暂不支持查看用户已有的自定义变量;
  • 暂不支持通过变量给变量赋值;
  • 暂不支持声明 BITMAP、HLL、PERCENTILE 和 ARRAY 类型的自定义变量,JSON 类型的自定义变量会转换为 STRING 类型进行存储;
  • 用户自定义变量属于会话级别的变量,当客户端断开时,其所有的会话变量会被释放;

示例

  1. mysql> SET @v1=1, @v2:=2;
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> select @v1,@v2;
  4. +------+------+
  5. | @v1 | @v2 |
  6. +------+------+
  7. | 1 | 2 |
  8. +------+------+
  9. 1 row in set (0.00 sec)
  10. mysql> select @v1+@v2;
  11. +-------------+
  12. | (@v1 + @v2) |
  13. +-------------+
  14. | 3 |
  15. +-------------+
  16. 1 row in set (0.01 sec)
  17. mysql> set @`var-name`=2;
  18. Query OK, 0 rows affected (0.00 sec)
  19. mysql> select @`var-name`;
  20. +-----------+
  21. | @var-name |
  22. +-----------+
  23. | 2 |
  24. +-----------+
  25. 1 row in set (0.00 sec)
  26. mysql> SET @j := '{"a": 1, "b": 2, "c": {"d": 4}}';
  27. Query OK, 0 rows affected (0.00 sec)
  28. mysql> select @j;
  29. +---------------------------------+
  30. | @j |
  31. +---------------------------------+
  32. | {"a": 1, "b": 2, "c": {"d": 4}} |
  33. +---------------------------------+
  34. 1 row in set (0.00 sec)