ユーザー定義変数は、セッション固有変数とも呼ばれます。これは、セッション内のどこかで初期化でき、セッションの終了までユーザー定義変数の値を含む、緩やかに型付けされた変数です。
ユーザー定義変数には、先頭に記号 @ が付きます。例:
@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 サイトの他の関連記事を参照してください。