ユーザー定義変数

このドキュメントでは、TiDB におけるユーザー定義変数の概念と、ユーザー定義変数を設定および読み取る方法について説明します。

ユーザー定義変数の形式は@var_nameです。 var_nameを構成する文字は、数字0-9 、文字a-zA-Z 、アンダースコア_ 、ドル記号$ 、および UTF-8 文字を含む、識別子を構成できる任意の文字にすることができます。さらに、英語の期間も含まれています. 。ユーザー定義変数は大文字と小文字を区別しません。

ユーザー定義変数はセッション固有です。つまり、あるクライアント接続で定義されたユーザー変数は、他のクライアント接続で表示または使用できません。

ユーザー定義変数の設定

SETステートメントを使用してユーザー定義変数を設定でき、構文はSET @var_name = expr [, @var_name = expr] ...;です。例えば:

SET @favorite_db = 'TiDB';
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
+------+------+------+
| @a1  | @a2  | @a3  |
+------+------+------+
|    1 |    2 |    4 |
+------+------+------+

SELECTステートメントで値を割り当てることもできます。

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

変数@a4が変更されるか接続が閉じられる前は、その値は常に7です。

ユーザー定義変数を設定するときに 16 進数リテラルまたはバイナリ リテラルが使用されている場合、TiDB はそれをバイナリ文字列として扱います。数値に設定する場合は、手動でCAST変換を追加するか、式で数値演算子を使用できます。

SET @v1 = b'1000001';
SET @v2 = b'1000001'+0;
SET @v3 = CAST(b'1000001' AS UNSIGNED);
SELECT @v1, @v2, @v3;
+------+------+------+
| @v1  | @v2  | @v3  |
+------+------+------+
| A    | 65   | 65   |
+------+------+------+

初期化されていないユーザー定義変数を参照すると、その値は NULL になり、型は文字列になります。

SELECT @not_exist;
+------------+
| @not_exist |
+------------+
| NULL       |
+------------+

SELECTステートメントを使用してユーザー定義変数を読み取ることに加えて、別の一般的な使用法としてPREPAREステートメントがあります。例えば:

SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
PREPARE stmt FROM @s;
SET @a = 6;
SET @b = 8;
EXECUTE stmt USING @a, @b;
+------------+
| hypotenuse |
+------------+
|         10 |
+------------+

ユーザー定義変数の内容は、SQL ステートメントの識別子として認識されません。例えば:

SELECT * from t;
+---+
| a |
+---+
| 1 |
+---+
SET @col = "`a`";
SELECT @col FROM t;
+------+
| @col |
+------+
| `a`  |
+------+

MySQL の互換性

SELECT ... INTO <variable>を除いて、MySQL と TiDB でサポートされている構文は同じです。

詳細については、 MySQL のユーザー定義変数を参照してください。

エコシステム
TiDB
TiKV
TiSpark
Chaos Mesh
© 2022 PingCAP. All Rights Reserved.