自定义变量指的是用户可以根据自身需求通过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)
4. mysql> select @v1,@v2;
5. +------+------+
6. | @v1 | @v2 |
7. +------+------+
8. | 1 | 2 |
9. +------+------+
10. 1 row in set (0.00 sec)
12. mysql> select @v1+@v2;
13. +-------------+
14. | (@v1 + @v2) |
15. +-------------+
16. | 3 |
17. +-------------+
18. 1 row in set (0.01 sec)
20. mysql> set @`var-name`=2;
21. Query OK, 0 rows affected (0.00 sec)
23. mysql> select @`var-name`;
24. +-----------+
25. | @var-name |
26. +-----------+
27. | 2 |
28. +-----------+
29. 1 row in set (0.00 sec)
31. mysql> SET @j := '{"a": 1, "b": 2, "c": {"d": 4}}';
32. Query OK, 0 rows affected (0.00 sec)
34. mysql> select @j;
35. +---------------------------------+
36. | @j |
37. +---------------------------------+
38. | {"a": 1, "b": 2, "c": {"d": 4}} |
39. +---------------------------------+
40. 1 row in set (0.00 sec)
