日期时间类型 === 日期时间类型用于保存年、月、日、时、分、秒等信息。MySQL 提供了多种时间类型,不同类型适合不同粒度和不同语义的时间数据。 常见类型包括: - `YEAR` - `DATE` - `TIME` - `DATETIME` - `TIMESTAMP` ### YEAR类型 `YEAR` 用于保存年份信息。 适合的场景: - 出生年份 - 入学年份 - 毕业年份 示例: ```sql CREATE TABLE student_profile ( id int NOT NULL AUTO_INCREMENT, enroll_year year DEFAULT NULL, PRIMARY KEY (id) ); ``` 如果字段只需要表达“年份”,使用 `YEAR` 会比字符串更清晰。 ### DATE类型 `DATE` 用于保存日期,不包含时分秒,格式通常为 `YYYY-MM-DD`。 适合的场景: - 生日 - 活动日期 - 结算日期 示例: ```sql CREATE TABLE holiday ( id int NOT NULL AUTO_INCREMENT, holiday_date date NOT NULL, PRIMARY KEY (id) ); ``` ### TIME类型 `TIME` 用于保存时间值,可以表示一天中的某个时间点,也可以表示一个时间间隔。 适合的场景: - 上班时间 - 持续时长 - 每日提醒时间 示例: ```sql CREATE TABLE work_time ( id int NOT NULL AUTO_INCREMENT, start_time time NOT NULL, PRIMARY KEY (id) ); ``` ### DATETIME类型 `DATETIME` 用于保存完整日期和时间,格式通常为 `YYYY-MM-DD HH:MM:SS`。 适合的场景: - 创建时间 - 预约时间 - 发布时间 示例: ```sql CREATE TABLE article ( id int NOT NULL AUTO_INCREMENT, publish_time datetime NOT NULL, PRIMARY KEY (id) ); ``` `DATETIME` 更偏向“业务时间”,它保存的是一个具体时间值,本身不强调时区转换。 ### TIMESTAMP类型 `TIMESTAMP` 同样可以保存日期和时间,但它更常用于记录系统时间,例如创建时间、更新时间。 示例: ```sql CREATE TABLE user_log ( id int NOT NULL AUTO_INCREMENT, created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id) ); ``` 这个例子里: - `created_at` 在插入时自动写入当前时间 - `updated_at` 在更新记录时自动刷新 因此 `TIMESTAMP` 很适合审计字段。 ### DATETIME和TIMESTAMP的区别 可以这样理解: - `DATETIME` 更适合业务层面的“真实时间点” - `TIMESTAMP` 更适合系统自动维护的时间字段 常见实践: - 订单创建时间、日志时间:常用 `TIMESTAMP` - 活动开始时间、预约时间:常用 `DATETIME` ### 小结 如果只需要年份,用 `YEAR`;只需要日期,用 `DATE`;只需要时间,用 `TIME`;需要完整日期时间,则常在 `DATETIME` 和 `TIMESTAMP` 之间选择。选型的关键不只是格式,还要考虑字段的业务语义。