MySQL 的 TIMESTAMP 列在插入或更新時可自動設置為當前時間,但這導致它不適合作為「創建時間」,更適合作為「最後更新時間」。創建時間建議使用 DATETIME + NOW() 顯式寫入。
| 定義 | INSERT 時 | UPDATE 時 |
|---|---|---|
TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 當前時間 | 自動刷新為當前時間 |
TIMESTAMP DEFAULT CURRENT_TIMESTAMP | 當前時間 | 不變 |
TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 0('0000-00-00 00:00:00') | 自動刷新為當前時間 |
TIMESTAMP DEFAULT '2000-01-01 00:00:00' | 固定默認值 | 不變(除非加 ON 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 自動更新
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。