MySQL 変数の型について: @変数とローカル変数
MySQL は、ユーザー定義変数 (接頭辞「@」が付く) とローカル変数 (ストアド プロシージャ内で定義される) という 2 つの主要な変数タイプを提供します。 それらの違いを把握することは、データベースを効率的に管理するために不可欠です。
ユーザー定義変数: セッションベースのストレージ
先頭の '@' 記号で識別されるユーザー定義変数は動的に型指定され、単一の MySQL セッションを通じてその値を保持します。 これらは、SET
ステートメントまたはクエリ内を使用して簡単に初期化され、一時的な値のストレージを提供します。
ストアド プロシージャでも変数が使用されますが、これらはユーザー定義変数とは異なります。 重要なのは、これらのプロシージャ ローカル変数にはプレフィックス「@」がなく、プロシージャのスコープ内にのみ存在することです。 これらは、プロシージャが実行されるたびに NULL
に再初期化されます。
範囲と動作: 明確な違い
主な違いはスコープにあります。ユーザー定義変数はセッションスコープであり、セッション内の複数のクエリとステートメントにわたって値を保持します。 逆に、プロシージャ変数はプロシージャ スコープであり、プロシージャが呼び出されるたびにデフォルト値 (通常は NULL
) にリセットされます。これにより、手続き上の独立性が確保されます。
説明例: 変数の動作の観察
次の例は、ユーザー定義変数とプロシージャ変数の対照的な動作を示しています。
<code class="language-sql">SET @var2 = 1; CREATE PROCEDURE prc_test () BEGIN DECLARE var2 INT DEFAULT 1; SET var2 = var2 + 1; SET @var2 = @var2 + 1; SELECT var2, @var2; END; CALL prc_test(); CALL prc_test(); CALL prc_test();</code>
結果の出力:
<code>var2 @var2 --- --- 2 2 2 3 2 4</code>
var2
(プロシージャ変数) がデフォルト値 (1) にリセットされ、呼び出しごとに増加するのに対し、@var2
(ユーザー定義変数) はプロシージャ呼び出し全体でその値を保持および蓄積することに注目してください。
結論: MySQL の変数システムの活用
MySQL の可変システムは、柔軟なデータ管理を提供します。 ユーザー定義 (@) 変数とプロシージャローカル変数の違いを認識し、それぞれのスコープ (セッションとプロシージャ) を理解することが、堅牢で効率的なデータベース アプリケーションを作成する鍵となります。
以上がMySQL のユーザー定義 @変数とプロシージャ変数: 違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。