MySQL トリガ
早速記事を書きます。
今日は仕事でMySQLのトリガについて調べたから、忘れないうちに記録しよっと。
トリガとは?
テーブルに対してINSERTやUPDATE、DELETEが行われたタイミングで何らかのステートメントを実行するものです。
マニュアルは以下。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 18 トリガ
こういうことも出来たのか!
mysql> delimiter //
http://dev.mysql.com/doc/refman/5.1/ja/using-triggers.html
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 ;
これはいろいろと使えそうな気がしてきました。
「OLD」は読み取り専用ですが、「NEW」に関しては値を代入することが出来るなんて。。。
注意点メモ
- トリガを TEMPORARYテーブルあるいはビューと連携させる事はできない
- TRIGGER権限が必要
- トリガを有効化する時、DEFINERで指定したユーザは、以下の権限を持っていなければならない
- テーブルに対するTRIGGER権限
- トリガの定義の中にあるOLD.col_nameあるいはNEW.col_nameに参照を利用するためのテーブルに対するSELECT権限
- 「SET NEW.col_name = value」を利用するためのテーブルに対するUPDATE権限。
- トリガ内で実行するステートメントに必要な権限
- 結果セットを返すステートメントは実行できない
-