MySQL: @variable と variable。違いは何ですか? 質問する

MySQL: @variable と variable。違いは何ですか? 質問する

私が投稿した別の質問で、次のような違いがあると誰かが言っていました:

@variable

そして:

variable

MySQL で。また、MSSQL にはバッチ スコープがあり、MySQL にはセッション スコープがあることにも言及しました。誰かこれについて詳しく説明してもらえますか?

ベストアンサー1

MySQLには次のような概念がありますユーザー定義変数

これらは、セッション内のどこかで初期化され、セッションが終了するまで値を保持する、緩く型付けされた変数です。

次のように、先頭に記号が付きます@@var

SETこの変数は、ステートメントまたはクエリ内で初期化できます。

SET @var = 1

SELECT @var2 := 2

MySQL でストアド プロシージャを開発する場合、入力パラメータを渡してローカル変数を宣言できます。

DELIMITER //

CREATE PROCEDURE prc_test (var INT)
BEGIN
    DECLARE  var2 INT;
    SET var2 = 1;
    SELECT  var2;
END;
//

DELIMITER ;

これらの変数にはプレフィックスは付加されません。

プロシージャ変数とセッション固有のユーザー定義変数の違いは、プロシージャ変数はNULLプロシージャが呼び出されるたびに再初期化されるのに対し、セッション固有の変数は再初期化されないことです。

CREATE PROCEDURE prc_test ()
BEGIN
    DECLARE var2 INT DEFAULT 1;
    SET var2 = var2 + 1;
    SET @var2 = @var2 + 1;
    SELECT  var2, @var2;
END;

SET @var2 = 1;

CALL prc_test();

var2  @var2
---   ---
2     2


CALL prc_test();

var2  @var2
---   ---
2     3


CALL prc_test();

var2  @var2
---   ---
2     4

ご覧のとおり、var2(プロシージャ変数) はプロシージャが呼び出されるたびに再初期化されますが、@var2(セッション固有の変数) は再初期化されません。

(ユーザー定義変数に加えて、MySQLには、 などの「グローバル変数」や などの「セッション変数」である可能性のある、いくつかの定義済み「システム変数」もありますこれらの「セッション変数」は、セッション固有のユーザー定義変数とは無関係です。)@@global.port@@session.sql_mode

おすすめ記事