キーワード†
- MySQL
- trigger
概要†
レコードに管理用カラムとして作成日時と更新日時を設けることがありますね。 アプリケーションでこれをセットするは少し面倒なので自動化したいです。 アプリケーションの実装は作成日時と更新日時を忘れることができます。
方法†
作成日時と更新日時用のカラムを用意します。
CREATED_AT datetime, UPDATED_AT timestamp default current_timestamp on update current_timestamp
更新日時は timestamp が勝手にやってくれるので、作成日時分のセットをトリガで実装します。
mysql> DELIMITER ;; mysql> mysql> create trigger HOGE_CREATION before insert on HOGE mysql> for each row begin mysql> set NEW.CREATED_AT = now(); mysql> end; mysql> ;; mysql> mysql> DELIMITER ;
解説†
current_timestamp に関する属性はひとつのカラムにしか与えられません。従って、次のようにはできません。
CREATED_AT timestamp default current_timestamp UPDATED_AT timestamp on update current_timestamp
このように timestamp について MySQL の縛りがあるので作成日時は datetime にしてしまいます。 両方を timestamp にすることもできますが、そのための属性を与えるのがそれはそれで煩雑なのでいっそやめます。