のーずいだんぷ

主に自分用メモですが、もしかしたら誰かの役に立つかもしれません

Mysqlでレコード挿入時に作成日を、更新時に更新日を自動で行えるようにする

概要

DBの各テーブルには大抵の場合、更新日と作成日、また作成者を登録したくなる。

これを全テーブルで、更には各updateとinsertのSQL操作で毎回書くのは冗長すぎるのでなんとか自動でできる手段を探していたが、 テーブル作成段階でこれを可能にする方法があったのでその備忘録。

結論

CREATE TABLE文で以下のようにする。

CREATE TABLE Users (
   //他のカラム定義
    created DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
);

見たとおりだが

  • insert時のデフォルト値について:DEFAULTに`CURRENT_TIMESTAMPを設定(insert時点の日時で記録)
  • update時の値について(updatedカラム): ON UPDATECURRENT_TIMESTAMPを設定

が実現している。

その他

他のテーブル定義にデフォルトでupdatedcreatedを付加する便利な方法を探している。 (テーブル作成時にコピペするだけなので大した手間というわけではないのだが、やはりめんどくさい...