MySQLで変数を宣言するにはどうすればいいですか? 質問する

MySQLで変数を宣言するにはどうすればいいですか? 質問する

2 番目のクエリで使用できるように、mysql で変数を宣言するにはどうすればよいですか?

次のようなことを書きたいです:

SET start = 1;
SET finish = 10;

SELECT * FROM places WHERE place BETWEEN start AND finish;

ベストアンサー1

MySQL には主に 3 種類の変数があります。

  1. ユーザー定義変数(先頭に が付く@):

    ユーザー定義変数は、宣言したり初期化したりしなくてもアクセスできます。初期化されていない変数を参照すると、その変数の値はNULL、型は文字列になります。

    SELECT @var_any_var_name
    

    SETorSELECTステートメントを使用して変数を初期化できます。

    SET @start = 1, @finish = 10;    
    

    または

    SELECT @start := 1, @finish := 10;
    
    SELECT * FROM places WHERE place BETWEEN @start AND @finish;
    

    ユーザー変数には、整数、小数点、浮動小数点、バイナリまたは非バイナリ文字列、または NULL 値など、限られたデータ型のセットから値を割り当てることができます。

    ユーザー定義変数はセッション固有です。つまり、あるクライアントによって定義されたユーザー変数は、他のクライアントでは表示または使用できません。

    SELECTこれらはクエリで次のように使用できます。高度な MySQL ユーザー変数テクニック

  2. ローカル変数(プレフィックスなし):

    ローカル変数は、アクセスする前に を使用して宣言する必要がありますDECLARE

    これらは、ローカル変数およびストアド プロシージャ内の入力パラメータとして使用できます。

    DELIMITER //
    
    CREATE PROCEDURE sp_test(var1 INT) 
    BEGIN   
        DECLARE start  INT unsigned DEFAULT 1;  
        DECLARE finish INT unsigned DEFAULT 10;
    
        SELECT  var1, start, finish;
    
        SELECT * FROM places WHERE place BETWEEN start AND finish; 
    END; //
    
    DELIMITER ;
    
    CALL sp_test(5);
    

    節が欠落している場合DEFAULT、初期値は ですNULL

    ローカル変数のスコープは、BEGIN ... ENDその変数が宣言されているブロックです。

  3. サーバーシステム変数(先頭に が付く@@):

    MySQLサーバーは多くのシステム変数デフォルト値に設定されます。タイプはGLOBALSESSION、 、 のいずれかになりますBOTH

    グローバル変数はサーバーの全体的な操作に影響しますが、セッション変数は個々のクライアント接続の操作に影響します。

    実行中のサーバーで使用されている現在の値を確認するには、SHOW VARIABLESまたは ステートメントを使用しますSELECT @@var_name

    SHOW VARIABLES LIKE '%wait_timeout%';
    
    SELECT @@sort_buffer_size;
    

    これらは、コマンドラインまたはオプション ファイルでオプションを使用して、サーバーの起動時に設定できます。これらのほとんどは、SET GLOBALまたはを使用してサーバーの実行中に動的に変更できますSET SESSION

    -- Syntax to Set value to a Global variable:
    SET GLOBAL sort_buffer_size=1000000;
    SET @@global.sort_buffer_size=1000000;
    
    -- Syntax to Set value to a Session variable:
    SET sort_buffer_size=1000000;
    SET SESSION sort_buffer_size=1000000;
    SET @@sort_buffer_size=1000000;
    SET @@local.sort_buffer_size=10000;
    

おすすめ記事