用户自定义变量

    本文介绍 TiDB 的用户自定义变量的概念,以及设置和读取用户自定义变量的方法。

    用户自定义变量格式为 。组成 var_name 的字符可以是任何能够组成标识符 (identifier) 的字符,包括数字 0-9、字母 a-zA-Z、下划线 _、美元符号 $ 以及 UTF-8 字符。此外,还包括英文句号 .。用户自定义变量是大小写不敏感的。

    SET 语句可以设置用户自定义变量,语法为 SET @var_name = expr [, @var_name = expr] ...;。例如:

    1. SET @a = 'a', @b = 'b', @c = 'c';

    其中赋值符号还可以使用 :=。例如:

    1. SET @favorite_db := 'TiDB';

    赋值符号右边的内容可以是任意合法的表达式。例如:

    1. SET @c = @a + @b;
    1. SET @c = b'1000001' + b'1000001';

    读取用户自定义变量

    要读取一个用户自定义变量,可以使用 SELECT 语句查询:

    1. SELECT @a1, @a2, @a3
    1. SELECT @a1, @a2, @a3, @a4 := @a1+@a2+@a3;
    1. +------+------+------+--------------------+
    2. | @a1 | @a2 | @a3 | @a4 := @a1+@a2+@a3 |
    3. +------+------+------+--------------------+
    4. +------+------+------+--------------------+

    其中变量 @a4 在被修改或关闭连接之前,值始终为 7

    如果设置用户变量时用了十六进制字面量或者二进制字面量,TiDB 会把它当成二进制字符串。如果要将其设置成数字,那么可以手动加上 CAST 转换,或者在表达式中使用数字的运算符:

    1. SET @v1 = b'1000001';
    2. SET @v2 = b'1000001'+0;
    1. SELECT @v1, @v2, @v3;
    1. +------+------+------+
    2. | @v1 | @v2 | @v3 |
    3. +------+------+------+
    4. | A | 65 | 65 |
    5. +------+------+------+

    如果获取一个没有设置过的变量,会返回一个 NULL:

    1. +------------+
    2. | @not_exist |
    3. +------------+
    4. | NULL |
    5. +------------+

    除了 SELECT 读取用户自定义变量以外,常见的用法还有 PREPARE 语句,例如:

    1. PREPARE stmt FROM @s;
    2. SET @a = 6;
    3. SET @b = 8;
    1. +------------+
    2. | hypotenuse |
    3. +------------+
    4. | 10 |
    5. +------------+
    1. SELECT * FROM t;
    1. +---+
    2. | a |
    3. +---+
    4. | 1 |
    5. +---+
    1. +------+
    2. | @col |
    3. +------+
    4. | `a` |

    更多细节,请参考 。