MySQL では ユーザー定義変数 を SET コマンドにて宣言できます。 定義できる値はリテラル値とスカラーサブクエリーによって返される値となります。
ユーザー定義変数は@var_name として記憶され、次のように式の値(expr)が割り当てられます
SET @var_name = expr;
リテラル値とスカラーサブクエリー値の宣言は以下の様になります。
なお、スカラーサブクエリー値の宣言の「@var4」の右辺の式の部分は全体を「()」括弧で囲む必要があります。
SET @var1 = 100; SET @var2 = 'aaaaaaaa'; SET @var3 = STR_TO_DATE('2024-01-01', '%Y-%m-%d'); SET @var4 = (select count(*) from t_auto);
それぞれの変数の値を取得してみると以下の様になります。
MariaDB [test]> SELECT @var1, @var2, date_format(@var3, '%Y/%m/%d'), @var4; +-------+----------+--------------------------------+-------+ | @var1 | @var2 | date_format(@var3, '%Y/%m/%d') | @var4 | +-------+----------+--------------------------------+-------+ | 100 | aaaaaaaa | 2024/01/01 | 3 | +-------+----------+--------------------------------+-------+ 1 row in set (0.05 sec)
それではこのスカラーサブクエリー値「@var4」はクエリの結果を返しているので「t_auto」テーブルに新規データを追加するとどうなるかを調べてみます。
データの追加は以下のSQLで実行します。
INSERT INTO t_auto(val) VALUES('test-a');
「@var4」の値を取得してみます。
MariaDB [test]> INSERT INTO t_auto(val) VALUES('test-a'); Query OK, 1 row affected (0.19 sec) MariaDB [test]> SELECT @var4; +-------+ | @var4 | +-------+ | 3 | +-------+ 1 row in set (0.00 sec)
上記の結果から、「@var4」は宣言された時の値を保持していることが分かります。 「@var4」を更新したいのであれば、再度 SET を行う必要があります。
MariaDB [test]> SET @var4 = (select count(*) from t_auto); Query OK, 0 rows affected (0.00 sec) MariaDB [test]> SELECT @var4; +-------+ | @var4 | +-------+ | 4 | +-------+ 1 row in set (0.00 sec)
PR
コメント