0

重複の可能性:
MySQL: @variable vs. variable。違いは何ですか?

私はフロントエンドのバックグラウンドから来ているので、この質問が初歩的であると思われる場合はご容赦ください。

MySQL ストアド プロシージャに関する投稿の大部分が@変数に使用されていることに気付きました。これは、変数がセッション変数であり、接続が存続している限りストアド プロシージャ全体で保持されることを意味しますが、1 つの変数が 1 つの接続内で複数のストアド プロシージャ呼び出しを相互汚染する必要があるのはなぜですか? すべてをローカライズした方がいいのではないですか? を使用しない場合、次のストアド プロシージャ呼び出しで@変数が再初期化されます。NULLこれはパフォーマンス上の理由で行われますか?

4

1 に答える 1

1

@ 記号はユーザー定義変数を示します。これに関するマニュアルのエントリは既に読んでいるようですが、とにかくこの抜粋を投稿します。

あるステートメントでユーザー定義変数に値を格納し、後で別のステートメントでそれを参照できます。これにより、あるステートメントから別のステートメントに値を渡すことができます。ユーザー定義変数は接続固有です。つまり、あるクライアントによって定義されたユーザー変数は、他のクライアントによって表示または使用されることはありません。特定のクライアント接続のすべての変数は、そのクライアントが終了すると自動的に解放されます。

1 つの接続内に複数のストアド プロシージャ コールがある場合は、リクエスト全体で変数の値の再定義が行われる場合に、どの変数が使用されるかについて十分に注意する必要があります。また、特定の条件下でトランザクションを使用する必要があります。これは、内部で定義された UDV がリクエストの存続期間を通じて外部ソースから破損しないようにするのにも役立ちます。

于 2012-11-27T00:33:53.823 に答える