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

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

Barbara Streisand
リリース: 2025-01-21 13:57:17
オリジナル
506 人が閲覧しました

User-defined @variables vs. Procedure variables in MySQL: What's the Difference?

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

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