1. ホーム
  2. mysql

[解決済み] MySQLで変数を宣言する方法は?

2022-03-20 11:48:30

質問

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

というようなことを書きたいのですが。

SET start = 1;
SET finish = 10;

SELECT * FROM places WHERE place BETWEEN start AND finish;

解決方法は?

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

  1. ユーザー定義変数 (接頭辞は @ ):

    ユーザー定義変数にアクセスするには、その変数を宣言する必要はありません。 初期化する。初期化されていない変数を参照する場合 初期化されると、その値は NULL で、型は string です。

    SELECT @var_any_var_name
    
    

    を使用して変数を初期化することができます。 SET または SELECT ステートメントを使用します。

    SET @start = 1, @finish = 10;    
    
    

    または

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

    ユーザー変数には、限られたデータセットから値を割り当てることができます。 型:整数、10進数、浮動小数点、バイナリまたは非バイナリ文字列。 または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サーバーは、多くの システム変数 をデフォルト値で設定します。 これらの型は GLOBAL , SESSION または 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;