【MySQL】システム変数とは?その確認、取得、変更方法とユーザー定義変数について

データベース

システム変数の意味と、システム変数の確認、取得、変更方法を紹介します。
またMySQLでは、ユーザーがシステム変数を定義できるユーザー定義変数が使えるので、
ユーザー定義変数についても紹介します。

システム変数とは

システム変数とは、データベース上で設定されている設定値のことです。
この設定値でデータベースの挙動が変化します。

データベースを扱うときに、データベースのシステム変数を確認したい場合があります。
その方法を紹介します。

システム変数の値の取得

-- セッション
@@session.変数名: 現在のセッション内での値を取得
-- @@local.変数名: @@sessionと同じ

-- グローバル
@@global.変数名: サーバー上の値を取得

-- sessionにあればセッション、なければglobal
@@変数名: session、globalの順番で変数を取得

システム変数には、@@sessionのように、セッション内で有効な変数と、
@@globalのように、サーバー上で有効な変数があります。
@@localは@@sessionとほぼ同じ意味です。

@@だけにすると、暗黙的にsessionから値を探し、sessionになければglobalに変数を取得します。

システム変数の値の変更

set session: 現在のセッション内で有効
set local: SESSIONと同じ
set global: 全てのセッション(サーバー全体)で有効(DB再起動まで)

set globalは、データベースを再起動すると値が変わりますので注意が必要です。
省略した場合はセッション変数を変更することになります。

システム変数の確認方法

-- 変数の確認
show variables
show [session|global|local] variables like '%auto%';

上のようにするとシステム変数を確認できます。
like検索を使えば、部分一致の検索もできます。

システム変数の値の取得

-- 値の取得
select @@session.autocommit;
select @@blobal.autocommit;

上を実行すると、その値を取得することができます。

システム変数の値の変更

-- 値の設定
set session autocommit = 1;
set @@session.autocommit = 0;

上のようにすると、システム変数を変更することができます。
sessionの値は、変更しても一度閉じると初期化されます。
上のように、autocommitを0にすると、start transactionを書く必要はなくなります。(オートコミットオフの状態)
オートコミットオフの状態では、すべてのcommitはtransactionの一部とみなされるので、commitがあるまではデータが反映されません。

ユーザー定義変数とは

ユーザー定義変数とは、ユーザー定義したシステム変数です。
セッション内でのみ有効となります。

ユーザー定義変数の定義方法

-- 定義
set @変数名 = 値;
-- 使用するとき
@変数名
set @sys_id = 2;

select * from mst_products mp
where mp.id = @sys_id;

setで値を指定することで、ユーザー定義変数を作成できます。
そして、@変数名で使用することができます。

取得した値をセットする

set @sys_id = 2;

select @sys_name := name from mst_products mp;
where mp.id = @sys_id;

-- @sys_nameの値を確認
select @sys_name;

上のように、コロンとイコールにすることで、取得してきたnameの値が@sys_nameに代入されます。

セッション内でのみ有効な点は注意しましょう。