pirosikick's diary

君のハートにunshift

MySQL トリガ

早速記事を書きます。
今日は仕事でMySQLのトリガについて調べたから、忘れないうちに記録しよっと。

トリガとは?

テーブルに対してINSERTやUPDATE、DELETEが行われたタイミングで何らかのステートメントを実行するものです。

マニュアルは以下。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 18 トリガ

こういうことも出来たのか!

mysql> delimiter //
mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON account
-> FOR EACH ROW
-> BEGIN
-> IF NEW.amount < 0 THEN
-> SET NEW.amount = 0;
-> ELSEIF NEW.amount > 100 THEN
-> SET NEW.amount = 100;
-> END IF;
-> END;//
mysql> delimiter ;

http://dev.mysql.com/doc/refman/5.1/ja/using-triggers.html

これはいろいろと使えそうな気がしてきました。
「OLD」は読み取り専用ですが、「NEW」に関しては値を代入することが出来るなんて。。。

注意点メモ

  • トリガを TEMPORARYテーブルあるいはビューと連携させる事はできない
  • TRIGGER権限が必要
  • トリガを有効化する時、DEFINERで指定したユーザは、以下の権限を持っていなければならない
    • テーブルに対するTRIGGER権限
    • トリガの定義の中にあるOLD.col_nameあるいはNEW.col_nameに参照を利用するためのテーブルに対するSELECT権限
    • 「SET NEW.col_name = value」を利用するためのテーブルに対するUPDATE権限。
    • トリガ内で実行するステートメントに必要な権限
  • 結果セットを返すステートメントは実行できない

-