ホームページ > データベース > mysql チュートリアル > MySQL のユーザー定義変数とプロシージャ変数: 違いは何ですか?

MySQL のユーザー定義変数とプロシージャ変数: 違いは何ですか?

Mary-Kate Olsen
リリース: 2025-01-21 14:01:10
オリジナル
542 人が閲覧しました

User-Defined Variables vs. Procedure Variables in MySQL: What's the Difference?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート