在 MySQL 中,TIMESTAMP 是一种用于存储日期和时间的数据类型,格式为
YYYY-MM-DD HH:MM:SS。它的一个重要特点是会自动处理时区转换,并且支持自动初始化和自动更新功能,非常适合记录数据的创建时间和修改时间。
1. TIMESTAMP 的基本用法
定义一个 TIMESTAMP 类型的列非常简单:
CREATE TABLE example ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), created_at TIMESTAMP );当你插入一条记录但没有指定
created_at值时,MySQL 会自动使用当前时间填充该字段。
2. 自动初始化和自动更新
你可以利用 TIMESTAMP 的两个常用特性:自动设置为当前时间(默认值) 和 更新行时自动更新时间。
示例:
CREATE TABLE logs ( id INT PRIMARY KEY AUTO_INCREMENT, message TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); DEFAULT CURRENT_TIMESTAMP:插入记录时自动设置时间为当前时间。 ON UPDATE CURRENT_TIMESTAMP:每次更新这行数据时,updated_at 自动更新为当前时间。比如执行:
INSERT INTO logs (message) VALUES ('Hello World'); -- 此时 created_at 和 updated_at 都是当前时间 UPDATE logs SET message = 'Updated' WHERE id = 1; -- 此时 updated_at 会自动变成新的时间3. 多个 TIMESTAMP 列的限制
MySQL 对表中 TIMESTAMP 列有一些限制:
一个表只能有一个 TIMESTAMP 列设置默认值为CURRENT_TIMESTAMP并允许 NULL(旧版本限制,MySQL 5.6.5 以后已放宽)。 从 MySQL 5.6.5 开始,可以对多个 TIMESTAMP 列使用
CURRENT_TIMESTAMP作为默认值或自动更新。
如果你遇到错误,请确认你的 MySQL 版本是否支持这些特性。
4. 与 DATETIME 的区别
TIMESTAMP 存储的是从 1970-01-01 00:00:00 UTC 开始的秒数,范围是1970-01-01 00:00:01到
2038-01-19 03:14:07(受“2038年问题”限制)。 DATETIME 范围更大(1000-01-01 到 9999-12-31),不同时区影响,适合长期保存的时间。 TIMESTAMP 会根据时区自动转换;DATETIME 不做时区处理。
例如你在东八区插入:
INSERT INTO example (name) VALUES ('Alice'); -- 存储的是 UTC 时间,查询时转为本地时区显示5. 手动设置 TIMESTAMP 值
你也可以显式插入特定时间:
INSERT INTO example (name, created_at) VALUES ('Bob', '2024-04-05 10:00:00');或者使用函数:
INSERT INTO example (name, created_at) VALUES ('Charlie', NOW());基本上就这些。TIMESTAMP 很适合用来记录数据的生命周期时间,只要注意它的时区行为和时间范围即可。
