データベース

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

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

この記事の目次
  1. システム変数とは
  2. システム変数の値の取得
  3. システム変数の値の変更
  4. システム変数の確認方法
  5. システム変数の値の取得
  6. システム変数の値の変更
  7. ユーザー定義変数とは
  8. ユーザー定義変数の定義方法
  9. 取得した値をセットする

システム変数の意味と、システム変数の確認、取得、変更方法を紹介します。
また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に代入されます。

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

スポンサーリンク