【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に代入されます。
セッション内でのみ有効な点は注意しましょう。