メイン

2010年05月07日

更新日時と作成日時

MySQL での更新日時(`updated_at`)と作成日時(`created_at`)の型をどうしようか迷ってしまい、ちとはまってしまった。。。

私の結論としては下記がベストのように思っている。

まず、テーブル作成は下記のようにする。

CREATE TABLE テーブル名 (
 ・・・略・・・
`updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`created_at` datetime NOT NULL
);

で、データを作成する際は

INSERT INTO テーブル名 (
 ・・・略・・・
`created_at`
)
VALUES (
 ・・・略・・・
NOW( )
);

とし、`updated_at`は明示しない。

また、データを更新する際は

UPDATE テーブル名
SET
・・・略・・・
WHERE
・・・略・・・;

とし、同じく`updated_at`は明示しない。

するとデータ作成時は `created_at`にセットされる NOW( ) と `updated_at` に暗黙的にセットされる CURRENT_TIMESTAMP が同じ値を挿入することにはなるが、以降、データ更新時には`updated_at` は明示しなくても自動的に CURRENT_TIMESTAMP で更新し続けてくれる。

細かくてどうでも良さそうで、今までは両方 datetime にして更新日時には NOW() をセットしていたんだが、この際ケジメをつけようと思ってこだわってみた結果、こう言う結論に私は至ったのである。

異論等御意見歓迎。