1. ホーム
  2. mysql

[解決済み] MySQLのことです。変数 vs. 変数。その違いは何ですか?

2022-03-19 06:39:32

質問

別の質問で、ある人が「この違いは何ですか?

@variable

とします。

variable

をMySQLに追加しました。また、MSSQLにはバッチスコープがあり、MySQLにはセッションスコープがあることを述べています。どなたか詳しく説明していただけませんか?

どのように解決するのですか?

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 これらのquot;セッション変数"は、セッション固有のユーザー定義変数とは無関係です)。