2番目のクエリで使用できるように、mysqlで変数を宣言する方法を教えてください。
以下のように書きたいと思います。
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
MySQLには主に3種類の変数があります。
ユーザー定義変数 (接頭辞@
):
宣言したり初期化したりすることなく、任意のユーザー定義変数にアクセスできます。初期化されていない変数を参照した場合、その変数の値はNULL
、型は文字列です。
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進数、浮動小数点数、2進数または非2進数の文字列、またはNULL値の限られたデータ型から値を代入できます。
ユーザー定義変数はセッション固有です。つまり、1つのクライアントによって定義されたユーザー変数は、他のクライアントから見たり使用したりすることはできません。
ローカル変数 (接頭辞なし):
ローカル変数は、アクセスする前に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;
セット
SET @var_name = value
OR
SET @var := value
= と := の両方の演算子が受け入れられます
SELECT
SELECT col1, @var_name := col2 from tb_name WHERE "conditon";
複数のレコードセットでcol2の最後の値のみが見つかった場合は、keep(override)です。
SELECT col1, col2 INTO @var_name, col3 FROM .....
この場合、selectの結果はcol2値を含みません
設定 または 選択 を使用
SET @counter := 100;
SELECT @variable_name := value;
例:
SELECT @price := MAX(product.price)
FROM product
DECLARE var_name [、var_name] ... type [DEFAULT value]この文は、ストアドプログラム内のローカル変数を宣言します。
例DECLARE id INT符号なしDEFAULT 1;
変数にデフォルト値を指定するには、DEFAULT句を含めます。値は式として指定できます。定数である必要はありません。 DEFAULT句がない場合、初期値はNULLです。
ローカル変数は、データ型とオーバーフローチェックに関して、ストアドルーチンのパラメータと同様に扱われます。
変数宣言は、カーソル宣言またはハンドラ宣言の前に置く必要があります。
ローカル変数名は大文字と小文字を区別しません。許容文字および引用規則は他の識別子の場合と同じです
ローカル変数の有効範囲は、それが宣言されているBEGIN ... ENDブロックです。同じ名前の変数を宣言するブロックを除いて、変数は宣言ブロック内にネストされたブロック内で参照できます。
declare Regione int;
set Regione=(select id from users
where id=1) ;
select Regione ;
さまざまなタイプの変数:
DECLAREはBEGIN ... END複合ステートメント内でのみ許可され、他のステートメントの前に開始する必要があります。
したがって、ストアドプログラムを定義しているときに実際に「ローカル変数」が必要な場合は、@文字を削除し、DECLAREステートメントがプログラムブロックの先頭にあることを確認する必要があります。それ以外の場合、「ユーザー変数」を使用するには、DECLAREステートメントをドロップします。
さらに、クエリをサブクエリとして実行するには、クエリを括弧で囲む必要があります。
SET @countTotal =(SELECT COUNT(*)FROM nGrams);
または、SELECT ... INTOを使用できます。
SELECT COUNT(*)INTO @countTotal FROM nGrams;
連結値を取得するためにconcat_ws関数で@variableを使用している人は、空の値で再初期化することを忘れないでください。そうでなければ、同じセッションに古い値を使うことができます。
Set @Ids = '';
select
@Ids := concat_ws(',',@Ids,tbl.Id),
tbl.Col1,
...
from mytable tbl;