2 番目のクエリで使用できるように、mysql で変数を宣言するにはどうすればよいですか?
次のようなことを書きたいです:
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
ベストアンサー1
MySQL には主に 3 種類の変数があります。
ユーザー定義変数(先頭に が付く
@
):ユーザー定義変数は、宣言したり初期化したりしなくてもアクセスできます。初期化されていない変数を参照すると、その変数の値は
NULL
、型は文字列になります。SELECT @var_any_var_name
SET
orSELECT
ステートメントを使用して変数を初期化できます。SET @start = 1, @finish = 10;
または
SELECT @start := 1, @finish := 10; SELECT * FROM places WHERE place BETWEEN @start AND @finish;
ユーザー変数には、整数、小数点、浮動小数点、バイナリまたは非バイナリ文字列、または NULL 値など、限られたデータ型のセットから値を割り当てることができます。
ユーザー定義変数はセッション固有です。つまり、あるクライアントによって定義されたユーザー変数は、他のクライアントでは表示または使用できません。
SELECT
これらはクエリで次のように使用できます。高度な MySQL ユーザー変数テクニック。ローカル変数(プレフィックスなし):
ローカル変数は、アクセスする前に を使用して宣言する必要があります
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
その変数が宣言されているブロックです。サーバーシステム変数(先頭に が付く
@@
):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;