home wiki.fukuchiharuki.me
Menu

キーワード

  • 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 にすることもできますが、そのための属性を与えるのがそれはそれで煩雑なのでいっそやめます。

参考