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

MySQL TIMESTAMP 自動更新機制全解析:建立時間 vs 更新時間

     編輯: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'固定值不變靜態預設

實測驗證 (建表與操作)

-- 情況 1:建立+更新皆自動
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 = NOW()
UPDATE t1 SET p_c = 2 WHERE p_c = 1;  -- p_time 更新為 NOW()

-- 情況 2:僅建立自動 (建立時間)
CREATE TABLE t2 (
    p_c INT NOT NULL,
    p_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

INSERT INTO t2(p_c) VALUES (1);  -- p_time = NOW()
UPDATE t2 SET p_c = 2 WHERE p_c = 1;  -- p_time 保持不變

-- 情況 3:單表多 TIMESTAMP 欄位 (僅一個可用 CURRENT_TIMESTAMP)
CREATE TABLE t3 (
    p_c INT NOT NULL,
    p_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    p_time2 TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=InnoDB;

完整規則總結 (官方文檔)

  1. 同時有 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP:預設現在、更新自動刷新
  2. 兩者皆無:等同於 (1)
  3. 僅 DEFAULT CURRENT_TIMESTAMP:預設現在、不自動更新
  4. 僅 ON UPDATE CURRENT_TIMESTAMP:預設 0、更新自動刷新
  5. 有常數 DEFAULT:預設常數、不自動初始化;若加 ON UPDATE 則更新自動刷新

最佳實踐建議

  • 建立時間:使用 DATETIME + DEFAULT CURRENT_TIMESTAMP (5.6.5+) 或應用層寫入 NOW()
  • 更新時間:使用 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  • 避免單表多個 DEFAULT CURRENT_TIMESTAMP 欄位衝突
  • 5.6+ 支援 DATETIME 同樣的自動初始化/更新語法,推薦統一用 DATETIME 避免 2038 年問題
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved