忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

MySQL ユーザー定義変数の宣言と使用方法について

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

コメント

コメントを書く