MySQL ユーザー定義変数: @変数とプロシージャ変数
MySQL は、先頭の @
記号 (例: @myVar
) で示されるユーザー定義変数を提供します。 これらの @variables
はセッションスコープです。これらはセッション内で初期化され、セッションが終了するまで保持されます。 重要な点は、プロシージャ変数とは異なります。
@variables
とは異なり、プロシージャ変数はストアド プロシージャに対してローカルです。 プロシージャが呼び出されるたびに、そのローカル変数は NULL
に再初期化されます。これは、同じセッション内の複数のプロシージャ呼び出しにわたって値を保持する @variables
とは大きく対照的です。 プロシージャ内の @variable
を変更すると、そのセッション内での後続の呼び出しの値に影響します。
@variables
とプロシージャ変数の両方を MySQL のシステム変数から区別することも重要です。システム変数は、グローバル (例: @@global.port
) またはセッションスコープ (例: @@session.sql_mode
) のいずれかです。 セッション システム変数はセッション固有ですが、@variables
.
違いを説明してみましょう:
CREATE PROCEDURE prc_test () BEGIN DECLARE myProcVar INT DEFAULT 1; SET myProcVar = myProcVar + 1; SET @myUserVar = @myUserVar + 1; SELECT myProcVar, @myUserVar; END; SET @myUserVar = 1; CALL prc_test(); CALL prc_test(); CALL prc_test();
出力には次のように表示されます:
<code>myProcVar @myUserVar --------- ---------- 2 2 2 3 2 4</code>
myProcVar
(プロシージャ変数) は呼び出しごとに 2 にリセットされますが、@myUserVar
(ユーザー定義変数) は累積的に増加し、呼び出し間でその値が維持されることに注目してください。
この理解は、MySQL 変数を効果的に使用するために重要です。 @variables
セッション データを管理し、プロシージャ変数はローカル プロシージャの状態を処理し、システム変数はデータベース環境を制御します。
以上がMySQL 変数: `@variables` とプロシージャ変数の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。