首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL TIMESTAMP 詳細解析:默認值、自動更新、多列行為與版本差異

     編輯:MySQL 綜合教學

MySQL TIMESTAMP 詳細解析:默認值、自動更新、多列行為與版本差異

TIMESTAMP 具有「建立時默認當前時間、更新時自動刷新」的雙重特性,但多列時行為不同。本文梳理單列/雙列定義語句、三種屬性組合、explicit_defaults_for_timestamp 影響及最佳實踐。

單列 TIMESTAMP 默認定義

CREATE TABLE t (
  ctime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  utime TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=InnoDB;
  • 第一個 TIMESTAMP 列若無顯式屬性,隱含 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。
  • 第二個及後續 TIMESTAMP 列預設 DEFAULT '0000-00-00 00:00:00'(零值),需手動加上 DEFAULT CURRENT_TIMESTAMP 或 ON UPDATE CURRENT_TIMESTAMP。

三種屬性組合對照

定義INSERT 行為UPDATE 行為
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP當前時間刷新當前時間
DEFAULT CURRENT_TIMESTAMP當前時間不變
ON UPDATE CURRENT_TIMESTAMP零值 (0000-00-00)刷新當前時間

版本與 SQL_MODE 影響

  • MySQL 5.6.6+ 引入 explicit_defaults_for_timestamp,啟用後**取消**第一個 TIMESTAMP 的隱含屬性,所有列行為一致,需顯式聲明。
  • NO_ZERO_DATE / NO_ZERO_IN_DATE 禁止零值,插入零值報錯。
  • 建議:SET sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,EXPLICIT_DEFAULTS_FOR_TIMESTAMP' 統一行為。

最佳實踐

  1. 明確業務語義:created_at 用 DEFAULT CURRENT_TIMESTAMP,updated_at 用 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。
  2. 避免依賴隱含行為,全部顯式寫出。
  3. 跨時區系統統一存 UTC,應用層轉換顯示。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved