- ベストアンサー
MYSQLでレコードの新規・編集時に自動で作成・編集日時を追加する方法
- MYSQLにて、レコードの新規・編集時に自動で作成・編集日時を追加する方法について説明します。
- 一番スマートでない方法は、Pt_createとPt_updateの2つのフィールドをDATETIME型とし、PHPで現在時刻を取得してSQL文で追加・更新する方法です。
- よりスマートな方法は、Pt_createフィールドをDATETIME型とし、Pt_updateフィールドをTIMESTAMP型で属性をon update CURRENT_TIMESTAMPとする方法です。PHPで現在時刻を取得し、SQL文でPt_createに追加し、Pt_updateは自動で更新されます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
えっと、省略であれば後者でいいと思います。 ただ、timestmpとdatetimeはどちらも日付型で似たような物すが、厳密に言うと全く別の物です。 まず、サポートしている範囲が違います。 timestmp:'1970-01-01 00:00:00' ~ 2037 年の一定の時点 datetime:'1000-01-01 00:00:00' ~ '9999-12-31 23:59:59' さらには消費バイトも違います。timestmpは4バイトでdatetimeは8バイト もし、RDBMSに依存しないような作りにするのであればtimestmp型を使うのがいいですが・・ MySQLのtimestmpは特殊仕様なので、MySQLでは私はdatetime型を使ってます。timestmpは楽ですが・・MySQLが自動でやってくれちゃうので想定外とかありそうで怖いので・・ なので、前者の方法で突っ込むのが私のやり方ですね。 新規作成時・・・ $sql = INSERT INTO (`Pt_create`,`Pt_update`) VALUES (now(), now())・・ 編集時・・・ $sql = UPDATE SET Pt_update= now()
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
TIMESTAMP型は1テーブルに1つですからね Pt_createをdatetime,Pt_updateをtimestampにするので問題ないでしょう。 そもそもPHPで日付をつくらなくてもMySQLにだって現時刻をとる日付関数はあります INSERT INTO (`Pt_create`) VALUES(NOW());
お礼
ありがとうございました! Now()があるのですね。でも同じようなことする人多そうなのに、 なぜタイムスタンプは1テーブルに1個なのでしょうか。
お礼
ありがとうございます。 タイムスタンプが特殊仕様とはどういうことでしょう。 前者が遠回りなようで、実装されている人もいることをしり新たな発見でした。 どちらにしようか考えて見ます。 DATETIMEだとバイト数が2倍なのですね。 大規模DBの構築となると関係してきそうですね。 はやくそんなシステムを作る仕事ができたらいいですけど。