萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL TIMESTAMP 自動更新時間機制詳解

核心特性

MySQL 的 TIMESTAMP 列在插入或更新時可自動設置為當前時間,但這導致它不適合作為「創建時間」,更適合作為「最後更新時間」。創建時間建議使用 DATETIME + NOW() 顯式寫入。

四種定義方式與行為

定義INSERT 時UPDATE 時
TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP當前時間自動刷新為當前時間
TIMESTAMP DEFAULT CURRENT_TIMESTAMP當前時間不變
TIMESTAMP ON UPDATE CURRENT_TIMESTAMP0('0000-00-00 00:00:00')自動刷新為當前時間
TIMESTAMP DEFAULT '2000-01-01 00:00:00'固定默認值不變(除非加 ON UPDATE)

實測示例

情況 1:自動 INSERT & UPDATE

CREATE TABLE t1 (
  p_c INT NOT NULL,
  p_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB;

INSERT INTO t1(p_c) VALUES (1);  -- p_time = 當前時間
UPDATE t1 SET p_c=2 WHERE p_c=1; -- p_time 自動更新

情況 2:僅自動 INSERT

CREATE TABLE t1 (
  p_c INT NOT NULL,
  p_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
-- UPDATE 時 p_time 保持不變

限制與注意

  • 一張表中只能有一個列使用 DEFAULT CURRENT_TIMESTAMP(MySQL 5.6.5 前),否則報錯。可通過給其他 TIMESTAMP 列指定 DEFAULT '0000-00-00 00:00:00' 繞過。
  • 若無 DEFAULT 和 ON UPDATE 子句,等同於 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。
copyright © 萬盛學電腦網 all rights reserved