MySQLにcreatedとmodifiedを記録するカラムを作る

MySQLにcreatedとmodifiedを記録するカラムを作るこんにちは。

MySQL初心者はぶつかる問題かもしれないということで一筆。MySQLで現在日時をデフォルトで指定できるcurrent_timestamp関数を使えるのはテーブルについて1カラムだけということなんですね。

なので、createdに登録日時、modifiedに更新日時を記録したい。登録時は両方current_timestampで指定し、modifiedはさらにon updateでcurrent_timestampを使うということができないのです。

でも同じことがしたい。調べた結果、ほぼ、[MySql] 登録日時の初期値と更新日時の自動更新 | So-Kai-App Noteに解決法がありました。

modifiedのみdefaultとon updateでcurrent_timestampを使い、createdはtimestamp型だけ記録しておいてデフォルト値を0にする。insert時にcreatedの値を入れると。これを参考にして僕も下記ように書いてみました。

`created` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

insert時は一手間かかりますが以下のようにしました。

INSERT INTO mytable (created) VALUES(now());

一応これで、やりたいことは実現できます。

 

Stackoverflowに別の方法が載っていました。

Having both a Created and Last Updated timestamp columns in MySQL 4.0

Insertするときに値にnullを入れればよいということです。

INSERT INTO mytable (created) VALUES(null);

実際、上記のようにcreatedにのみnullを入れたところ、正しく現在の日時がtimestamp型で入りました。ただ、この方法は多少トリッキーな感じがするので、まだ全貌が見えていない初心者のうちは使わないようにしようと思っています。

Pocket
LINEで送る

You may also like...