• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:レコード新規・編集時に自動で作成・編集日時を追加)

MYSQLでレコードの新規・編集時に自動で作成・編集日時を追加する方法

このQ&Aのポイント
  • 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は自動で更新されます。

質問者が選んだベストアンサー

  • ベストアンサー
  • kool_noah
  • ベストアンサー率33% (95/285)
回答No.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()

raryrary
質問者

お礼

ありがとうございます。 タイムスタンプが特殊仕様とはどういうことでしょう。 前者が遠回りなようで、実装されている人もいることをしり新たな発見でした。 どちらにしようか考えて見ます。 DATETIMEだとバイト数が2倍なのですね。 大規模DBの構築となると関係してきそうですね。 はやくそんなシステムを作る仕事ができたらいいですけど。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

TIMESTAMP型は1テーブルに1つですからね Pt_createをdatetime,Pt_updateをtimestampにするので問題ないでしょう。 そもそもPHPで日付をつくらなくてもMySQLにだって現時刻をとる日付関数はあります INSERT INTO (`Pt_create`) VALUES(NOW());

raryrary
質問者

お礼

ありがとうございました! Now()があるのですね。でも同じようなことする人多そうなのに、 なぜタイムスタンプは1テーブルに1個なのでしょうか。