Skip to content

Latest commit

 

History

History
135 lines (92 loc) · 2.73 KB

File metadata and controls

135 lines (92 loc) · 2.73 KB

日期时间类型

日期时间类型用于保存年、月、日、时、分、秒等信息。MySQL 提供了多种时间类型,不同类型适合不同粒度和不同语义的时间数据。

常见类型包括:

  • YEAR
  • DATE
  • TIME
  • DATETIME
  • TIMESTAMP

YEAR类型

YEAR 用于保存年份信息。

适合的场景:

  • 出生年份
  • 入学年份
  • 毕业年份

示例:

CREATE TABLE student_profile (
  id int NOT NULL AUTO_INCREMENT,
  enroll_year year DEFAULT NULL,
  PRIMARY KEY (id)
);

如果字段只需要表达“年份”,使用 YEAR 会比字符串更清晰。

DATE类型

DATE 用于保存日期,不包含时分秒,格式通常为 YYYY-MM-DD

适合的场景:

  • 生日
  • 活动日期
  • 结算日期

示例:

CREATE TABLE holiday (
  id int NOT NULL AUTO_INCREMENT,
  holiday_date date NOT NULL,
  PRIMARY KEY (id)
);

TIME类型

TIME 用于保存时间值,可以表示一天中的某个时间点,也可以表示一个时间间隔。

适合的场景:

  • 上班时间
  • 持续时长
  • 每日提醒时间

示例:

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

适合的场景:

  • 创建时间
  • 预约时间
  • 发布时间

示例:

CREATE TABLE article (
  id int NOT NULL AUTO_INCREMENT,
  publish_time datetime NOT NULL,
  PRIMARY KEY (id)
);

DATETIME 更偏向“业务时间”,它保存的是一个具体时间值,本身不强调时区转换。

TIMESTAMP类型

TIMESTAMP 同样可以保存日期和时间,但它更常用于记录系统时间,例如创建时间、更新时间。

示例:

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;需要完整日期时间,则常在 DATETIMETIMESTAMP 之间选择。选型的关键不只是格式,还要考虑字段的业务语义。