sql >> データベース >  >> RDS >> Mysql

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

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



    1. SQLServerトランザクションログファイルからデータを回復する方法

    2. AndroidでSQLiteデータベースを処理するメソッドをテストする方法は?

    3. n個のグループ化されたカテゴリを取得し、他のカテゴリを1つに合計します

    4. R DBI ODBCエラー:nanodbc / nanodbc.cpp:3110:07009:[Microsoft][SQLServer用のODBCドライバー13]無効な記述子インデックス