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;
[実行結果]
SET 文で @value1 と @value2 というユーザー定義変数を定義し、整数を代入しています。
それに続く SELECT 文で、@value1 * @value2 を計算しています。
SET @date1 = '2025-08-01';
SELECT @date1 AS date1,
DATE_ADD(@date1, INTERVAL 1 DAY) AS date2;
[実行結果]
この例では、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);
[実行結果]
ちなみに、ユーザー定義変数もローカル変数も、次のような感じで SELECT INTO 文を使っても変数に値を代入できます。
SET @full_name = '';
SELECT CONCAT(first_name, ' ', last_name) INTO @full_name
FROM students
WHERE student_id = 1;
SELECT @full_name;
[実行結果]
以上、MySQL で変数を定義する方法をご説明しました。