MySQL timestamp自動生成時間、自動更新時間.実戦


CREATE TABLE `test`
 (    `CreateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
   `ModiTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) 
   ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

あまり話さないで先に配置します.この構成はtimestampタイプでなければなりません.datatimeは使用できません.datatimeを使用すると「値が空ではありません」とエラーが表示されるためです.
NOT NULL DEFAULT CURRENT_TIMESTAMP:値が空ではありません.デフォルト値は現在の時間です.
NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP:値が空ではありません.デフォルト値は現在の時間で、データが更新された場合、値は現在の時間に更新されます.
ここで2つの構成の使い方は、私の上の1つが作成時間として使用でき、1つは変更時間として使用できます.ここで強調したいのは、更新時にModiTimeフィールドに値がある場合は更新されず、更新時にはModiTime=nullを維持することです.
ここでスレ主は言って、スレ主プロジェクトはjpaを使って、だからここでもし使うならば
DEFAULT CURRENT_TIMESTAMP

jpa、jpa、jpa、jpaはnull値を注入してくれるので、予想通りの効果は得られません.だから使う必要がある
NOT NULL

手を上げて.ここで質問があるかもしれませんが、NOT NULLを使って挿入したときは空いていたのではないでしょうか.実はそうではありません.運行の順序を見てみましょう.
  • jpa書き込みNULL値を実行します.データベースがNULLではないため、エラーが発生するはずです.
  • データベースは構成のデフォルト値を発見し、デフォルト値を書き込み、
  • 正常
  • 運転