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

MySQL 変数: `@variables` とプロシージャ変数の違いは何ですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-21 13:46:09632ブラウズ

MySQL Variables: What's the Difference Between `@variables` and Procedure Variables?

MySQL ユーザー定義変数: @変数とプロシージャ変数

MySQL は、先頭の @ 記号 (例: @myVar) で示されるユーザー定義変数を提供します。 これらの @variables はセッションスコープです。これらはセッション内で初期化され、セッションが終了するまで保持されます。 重要な点は、プロシージャ変数とは異なります。

@variables とは異なり、プロシージャ変数はストアド プロシージャに対してローカルです。 プロシージャが呼び出されるたびに、そのローカル変数は NULL に再初期化されます。これは、同じセッション内の複数のプロシージャ呼び出しにわたって値を保持する @variables とは大きく対照的です。 プロシージャ内の @variable を変更すると、そのセッション内での後続の呼び出しの値に影響します。

@variables とプロシージャ変数の両方を MySQL のシステム変数から区別することも重要です。システム変数は、グローバル (例: @@global.port) またはセッションスコープ (例: @@session.sql_mode) のいずれかです。 セッション システム変数はセッション固有ですが、@variables.

とは異なる動作をします。

違いを説明してみましょう:

<code class="language-sql">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>

出力には次のように表示されます:

<code>myProcVar  @myUserVar
---------  ----------
2           2
2           3
2           4</code>

myProcVar (プロシージャ変数) は呼び出しごとに 2 にリセットされますが、@myUserVar (ユーザー定義変数) は累積的に増加し、呼び出し間でその値が維持されることに注目してください。

この理解は、MySQL 変数を効果的に使用するために重要です。 @variables セッション データを管理し、プロシージャ変数はローカル プロシージャの状態を処理し、システム変数はデータベース環境を制御します。

以上がMySQL 変数: `@variables` とプロシージャ変数の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。