MySQL で変数を定義する

MySQL を使って開発をしていると、変数を定義して使いたい時が出てきますよね。

ここでは MySQL で変数を定義する方法をご説明します。

ユーザー定義変数の基本と定義する方法

MySQL のユーザー定義変数は、変数を定義して、同じセッション内であればどこでも使うことができます。

定義する際に型の宣言は不要で、型情報は保持されません。コンテキストによってデータ型が解釈されます。


ユーザー定義変数は SET 文を使って次のように定義できます。

SET @変数名 = 値;

ユーザー定義変数の変数名は @ から始まり、名前には英数字と「.」「_」「$」の記号が使えます。

また、変数名は 64 文字以内でなくてはならず、ケースセンシティブではありません。


以下のように連続して定義することも可能です。

SET @変数名1 = 値1, @変数名2 = 値2, @変数名3 = 値3, .. 

全く同じ方法で SELECT 文でも定義できます。


それでは、ユーザー定義変数を定義して使ってみます。

SET @value1 = 5;
SET @value2 = 10;

SELECT @value1 * @value2 AS Result;

[実行結果]
MySQL で変数を定義する 1

SET 文で @value1 と @value2 というユーザー定義変数を定義し、整数を代入しています。

それに続く SELECT 文で、@value1 * @value2 を計算しています。


SET @date1 = '2025-08-01';

SELECT 	@date1 AS date1,
        DATE_ADD(@date1, INTERVAL 1 DAY) AS date2;

[実行結果]
MySQL で変数を定義する 2

この例では、SET 文で @date1 というユーザー定義変数を定義し、日付の文字列を代入しています。

それに続く SELECT 文で、DATE_ADD 関数を使って @date1 に1 日足しています。


ローカル変数の基本と定義する方法

MySQL のローカル変数は、定義した変数を、定義したストアドプログラムの BEGIN ... END 内でのみ使うことができます。

ユーザー定義変数と違い、定義する際に型を宣言します。


ローカル変数は DECLARE 文を使って次のように定義できます。

DECLARE 変数名 データ型 [DEFAULT 値];

ユーザー定義変数と違い、ローカル変数は変数名の前に @ はつきません。

宣言と同時に値を代入したい時は DEFAULT 句を使います。

DEFAULT 句がない場合は値は NULL になります。


ローカル変数を使ったユーザー定義関数の例をご紹介します。

これは、以前「MySQL のユーザー定義関数」の記事で作った、税込の値段を入力引数として渡して、税抜きの値段を返す get_before_tax_price という名前のユーザー定義関数です。

DELIMITER //
CREATE FUNCTION get_before_tax_price (
	after_tax_price DECIMAL(13,2)
)
RETURNS DECIMAL(13,2)
DETERMINISTIC
BEGIN
	
    DECLARE before_tax_price DECIMAL(13,2);
    DECLARE sale_tax_percent DECIMAL(5,2) DEFAULT 10; -- 10%
    
    SET before_tax_price = IFNULL(after_tax_price, 0) * 100 / (sale_tax_percent + 100) ;
    RETURN before_tax_price;
    
END//
DELIMITER ;

9 行目で before_tax_price と言う名前の DECIMAL(13,2) 型のローカル変数を定義しています。

10 行目では、sale_tax_percent という名前で DECIMAL(5,2) 型のローカル変数を定義し、DEFAULT 句を使って、10 を代入しています。

定義した後はローカル変数に SET 文などで値を代入できます。


DECLARE 文はストアドプログラム外で使って変数を定義しようとすると、次のようにエラーになります。

DECLARE before_tax_price DECIMAL(13,2);

[実行結果]
MySQL で変数を定義する 3


ちなみに、ユーザー定義変数もローカル変数も、次のような感じで SELECT INTO 文を使っても変数に値を代入できます。

SET @full_name = '';

SELECT 	CONCAT(first_name, ' ', last_name) INTO @full_name
FROM 	students
WHERE 	student_id = 1;

SELECT @full_name;

[実行結果]
MySQL で変数を定義する 4


以上、MySQL で変数を定義する方法をご説明しました。

© 2025 MySQL 入門