用户自定义变量
警告
当前该功能为实验特性,不建议在生产环境中使用。
本文介绍 TiDB 的用户自定义变量的概念,以及设置和读取用户自定义变量的方法。
用户自定义变量格式为 。组成 var_name
的字符可以是任何能够组成标识符 (identifier) 的字符,包括数字 0-9
、字母 a-zA-Z
、下划线 _
、美元符号 $
以及 UTF-8 字符。此外,还包括英文句号 .
。用户自定义变量是大小写不敏感的。
用户自定义变量跟 session 绑定,当前设置的用户变量只在当前连接中可见,其他客户端连接无法查看。
SET @a = 'a', @b = 'b', @c = 'c';
其中赋值符号还可以使用 :=
。例如:
SET @favorite_db := 'TiDB';
赋值符号右边的内容可以是任意合法的表达式。例如:
SET @c = @a + @b;
SET @c = b'1000001' + b'1000001';
要读取一个用户自定义变量,可以使用 SELECT
语句查询:
SELECT @a1, @a2, @a3
还可以在 SELECT
语句中赋值:
SELECT @a1, @a2, @a3, @a4 := @a1+@a2+@a3;
+------+------+------+--------------------+
| @a1 | @a2 | @a3 | @a4 := @a1+@a2+@a3 |
+------+------+------+--------------------+
+------+------+------+--------------------+
其中变量 @a4
在被修改或关闭连接之前,值始终为 7
。
SET @v1 = b'1000001';
SET @v3 = CAST(b'1000001' AS UNSIGNED);
SELECT @v1, @v2, @v3;
+------+------+------+
| @v1 | @v2 | @v3 |
+------+------+------+
| A | 65 | 65 |
+------+------+------+
如果获取一个没有设置过的变量,会返回一个 NULL:
+------------+
| @not_exist |
+------------+
| NULL |
+------------+
除了 SELECT
读取用户自定义变量以外,常见的用法还有 PREPARE
语句,例如:
PREPARE stmt FROM @s;
SET @a = 6;
EXECUTE stmt USING @a, @b;
+------------+
| hypotenuse |
+------------+
| 10 |
+------------+
用户自定义变量的内容不会在 SQL 语句中被当成标识符,例如:
SELECT * FROM t;
+---+
| a |
+---+
| 1 |
+---+
+------+
| @col |
+------+
+------+
除 外,MySQL 和 TiDB 支持的语法相同。
更多细节,请参考 。