MySQLには、 ユーザー定義変数<の概念があります。 / a> 。
これらは緩く型付けされた変数であり、セッションのどこかで初期化され、セッションが終了するまでその値を保持します。
それらの前には@が付いています 次のように署名します:@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などの「セッション変数」;これらの「セッション変数」は、セッション固有のユーザー定義変数とは無関係です。)