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