首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL TIMESTAMP 自動更新機制詳解:DEFAULT/ON UPDATE 四種組合行為對比

     編輯:MySQL 資料庫相關知識

四種定義模式對比

定義語法INSERT 時UPDATE 時適用場景
TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP當前時間自動刷新為當前時間修改時間戳
TIMESTAMP DEFAULT CURRENT_TIMESTAMP當前時間不變創建時間戳
TIMESTAMP ON UPDATE CURRENT_TIMESTAMP0000-00-00 00:00:00自動刷新極少用
TIMESTAMP DEFAULT '2000-01-01 00:00:00'固定默認值不變(除非顯式 UPDATE)業務默認值

關鍵規則

  1. **一張表只能有一個列使用 `DEFAULT CURRENT_TIMESTAMP`** 作為隱式默認值(MySQL 5.6.5+ 放寬,但建議遵守)。
  2. 若需「創建時間」+「修改時間」,創建時間用 DATETIME DEFAULT CURRENT_TIMESTAMP(5.6.5+ 支援),修改時間用 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。
  3. 未顯式指定 DEFAULT 或 ON UPDATE 時,等同於 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。
  4. TIMESTAMP 範圍 1970-2038,跨世紀業務請用 DATETIME。

實戰建表範例

CREATE TABLE t_log (
    id INT AUTO_INCREMENT PRIMARY KEY,
    content VARCHAR(255),
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,          -- 創建時間,不變
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP  -- 修改時間,自動刷新
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

驗證行為

INSERT INTO t_log (content) VALUES ('first');
-- created_at=2024-01-01 10:00:00, updated_at=2024-01-01 10:00:00

UPDATE t_log SET content='second' WHERE id=1;
-- created_at 不變, updated_at=2024-01-01 10:05:00
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved