ホームページ  >  記事  >  データベース  >  MySQL のユーザー定義変数とローカル変数?

MySQL のユーザー定義変数とローカル変数?

WBOY
WBOY転載
2023-09-06 21:05:061340ブラウズ

MySQL 中的用户定义变量与局部变量?

ユーザー定義変数は、セッション固有変数とも呼ばれます。これは、セッション内のどこかで初期化でき、セッションの終了までユーザー定義変数の値を含む、緩やかに型付けされた変数です。

ユーザー定義変数には、先頭に記号 @ が付きます。例:

@anyVariableName;

ユーザー定義変数を初期化するには 2 つの方法があります。 SET コマンドまたは SELECT クエリを使用できます。 1 つ目の方法は次のとおりです。

SET @anyVariableName=anyValue;

2 つ目の方法は次のとおりです。

SELECT @anyVariableName :=anyValue;

SELECT クエリでコロン (:) を使用しない場合、式として評価されます。 。結果は true または false です:

mysql> select @m=10;

出力は次のとおりです:

+-------+
| @m=10 |
+-------+
|     1 |
+-------+
1 row in set (0.00 sec)

ローカル変数は、ストアド プロシージャ、関数などで DECLARE キーワードとともに使用できます。ユーザー定義変数のように @ プレフィックスは必要ありません。

ローカル変数の構文は次のとおりです。

DECLARE yourVariableName dataType;

: ローカル変数とユーザー定義変数の主な違いは、ローカル変数はストアド プロシージャが呼び出されるたびに NULL 値で再初期化されるのに対し、セッション固有の変数は NULL 値で再初期化されることです。またはユーザー定義変数 変数を定義することはできません。 NULL で再初期化されません。あるユーザーが設定したユーザー定義変数は、他のユーザーには表示されません。特定のユーザーのセッション変数は、ユーザーが終了すると自動的に破棄されます。

ここでは、ストアド プロシージャを使用したセッション固有の変数とローカル変数のデモンストレーションを示します。ローカル変数とユーザー定義変数を使用してストアド プロシージャを作成するクエリは次のとおりです。

mysql> DELIMITER //
mysql> CREATE PROCEDURE sp_LocalAndUserDefinedVariableDemo()
   -> BEGIN
   -> DECLARE localVariable int default 10;
   -> SET localVariable=localVariable+10;  
   -> SET @userVariable=@userVariable+10;
   -> SELECT localVariable;
   -> SELECT @userVariable;
   -> END;
   -> //
Query OK, 0 rows affected (0.39 sec)
mysql> DELIMITER ;

次に、ユーザー定義変数の値を設定します。クエリは次のとおりです。

mysql> SET @userVariable=10;
Query OK, 0 rows affected (0.00 sec)

次に、ストアド プロシージャを呼び出します。最初の呼び出しでは、ユーザー定義変数は 10 10=20、ローカル変数は 10 10=20 です。

call コマンドを使用してストアド プロシージャを呼び出します:

mysql> CALL sp_LocalAndUserDefinedVariableDemo();

出力は次のとおりです:

+---------------+
| localVariable |
+---------------+
|            20 |
+---------------+
1 row in set (0.32 sec)
+---------------+
| @userVariable |
+---------------+
|            20 |
+---------------+
1 row in set (0.34 sec)
Query OK, 0 rows affected (0.36 sec)

2 番目の呼び出しでは、ユーザー定義変数が値を保持します。 20 に 10 を追加します。たとえば、20 10=30 となります。ローカル変数は再び 10 で再初期化され、10 10=20 のように 10 が追加されます。

ストアド プロシージャを呼び出して、サンプル出力を確認します:

mysql> CALL sp_LocalAndUserDefinedVariableDemo();

以下は出力です:

+---------------+
| localVariable |
+---------------+
|            20 |
+---------------+
1 row in set (0.00 sec)
+---------------+
| @userVariable |
+---------------+
|            30 |
+---------------+
1 row in set (0.01 sec)
Query OK, 0 rows affected (0.02 sec)

3 回目の呼び出しでは、ユーザー定義変数は値 30 を保持します。 30 10=40 のように 10 を追加すると、ローカル変数は 10 で再度初期化され、10 10=20 のように 10 が追加されます。

これで、すべてのプロシージャ呼び出しでローカル変数が何らかの値で再初期化されると言えます。その値は NULL またはその他の値になる可能性があります。たとえば、私の場合はデフォルト値 10 を指定しました。これは、プロシージャ呼び出しごとにローカル変数を値 10 に設定するのに対し、ユーザー定義変数は値 10 に設定しないことを意味します。

以上がMySQL のユーザー定義変数とローカル変数?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。