【MySQL】トリガーを使ってみる

スポンサーリンク

トリガーの使い方を紹介します。

 

トリガーとは

データベースに対しする操作(insert、update、delete)を行った際に、SQLを発行できるDBの機能です。

履歴テーブルやサマリテーブルを扱う場合に便利な機能です。

トリガーの使い方

構文です。

create trigger トリガー名 実行タイミング(before、after) 操作(insert、update、delete)
on テーブル名 for each row
begin
実行したいSQL
end;

実行タイミング(before、after)

トリガーの実行タイミングを定義します。

トリガーとなるテーブルへの操作前にトリガーを実行する場合はbefore、実行後ならafterを指定します。

例えば更新を行う前にトリガーを実行したいならbefore、更新後にトリガーを実行したいならafterになります。

操作(insert、update、delete)

どの操作を行ったときにトリガーを実行するか定義することができます。

追加の場合はinsert、更新の場合はupdate、削除の場合はdeleteになります。

複数の操作(追加と更新など)を設定することはできませんので、各操作毎にトリガーを定義しなければいけません。

実行したいSQL

実行タイミングとは別で、操作実行前後の値を取り出すことができます。

履歴テーブルに更新前の値を追加したい場合はOLD.カラム名になります。

サマリテーブルの場合は更新後の値が必要ですので、NEW.カラム名となります。

トリガーの使用例

削除データを履歴テーブルに保管するトリガーをつくります

peopleテーブルに削除(delete)が行われた場合にpeople_rテーブルに削除したデータを追加(insert)します。

 

トリガーを作成します。作成方法はプロシージャやファンクションと同じです。

create trigger people_history after delete
on people for each row
begin
insert into people_history(updatetime,ud_flag,name,mail,age)
values(now(),'d',old.name,old.mail,old.age);
end;

 

peopleテーブルのid7を削除します。

delete from people where id = 7;

people_rテーブルに追加されました。

便利だけど乱用には注意を!

トリガーを使っているDBに対してデータメンテナンスを行う場合にDBの構成を知らないメンバーが行うと事故の原因になります。

特定のテーブルにupdate文を流したつもりでも、トリガーが定義されていたことにより想定と違うテーブルにまで影響がでてしまったということになります。

便利な機能ですが、処理の流れが見えにくくなりますので注意が必要です。

 

タイトルとURLをコピーしました