MySQL のユーザー定義変数とプロセス変数の比較
MySQL では、ユーザー定義変数は @
接頭辞を付けて宣言されますが、プロシージャ変数には接頭辞がありません。この違いは、セッション固有のユーザー定義変数はセッション全体にわたって値を保持するのに対し、プロシージャ変数はプロシージャ呼び出しごとに NULL に再初期化されるという事実から生じます。
セッション固有の変数 (@variable)
@
という接頭辞が付いたユーザー定義変数は、セッション固有の変数として機能します。これらは SET ステートメントまたはクエリ内で初期化でき、セッションが終了するまで保持されます。例:
<code class="language-sql">SET @var = 1;</code>
プロセス変数(変数)
ストアド プロシージャまたは関数内でプレフィックスなしで宣言された変数はローカル変数です。これらの変数はプロシージャのスコープ内でのみ使用でき、プロシージャ呼び出しごとに NULL に再初期化されます。
<code class="language-sql">CREATE PROCEDURE prc_test () BEGIN DECLARE var2 INT DEFAULT 1; ... END;</code>
主な違い
次の表は、@
変数とプロセス変数の主な違いをまとめたものです。
@variable
(セッション固有)変数
(プロセス変数)特性 |
@variable (会话特定) |
variable (过程变量) |
---|---|---|
作用域 | 持续整个会话 | 每次过程调用时重新初始化 |
语法 | 以 @ 为前缀 |
没有前缀 |
例
次のストアド プロシージャを考えてみましょう:
<code class="language-sql">CREATE PROCEDURE prc_test () BEGIN DECLARE var2 INT DEFAULT 1; SET var2 = var2 + 1; SET @var2 = @var2 + 1; ... END;</code>
は 1 にリセットされ、var2
はインクリメントされ続けます。これは、プロセス変数の再初期化動作とユーザー定義変数のセッション固有の性質を示しています。 @var2
以上がMySQL のユーザー定義変数とプロシージャ変数: 違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。