MySQL 中 TIMESTAMP 和 DATETIME 的区别

2020-11-22   95 次阅读


MySQL 中 TIMESTAMP 和 DATETIME 的区别

TIMESTAMP

  1. TIMESTAMP 列必须有默认值,默认值可以为 “0000-00-00 00:00:00”,但不能为 null。
  2. TIMESTAMP 列不可以设置值,只能由数据库自动去修改。
  3. 一个表可以存在多个 TIMESTAMP 列,但只有一个列会根据数据更新而改变为数据库系统当前值。因此,一个表中有多个 TIMESTAMP 列是没有意义,实际上一个表只设定一个 TIMESTAMP 列。
  4. TIMESTAMP 列的默认值是CURRENT_TIMESTAMP常量值。当纪录数据发生变化的时候,TIMESTAMP 列会自动将其值设定为CURRENT_TIMESTAMP。
  5. TIMESTAMP 列创建后的格式是:
`a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

这个语句含义,a 字段的默认值是 CURRENT_TIMESTAMP,当纪录更新时候,自动将 a 字段的值设置为 CURRENT_TIMESTAMP。
6. 另外,下面的定义从语法角度是对的,但是没有意义,因为该字段的值不可更改,永远只能为默认值。

`b` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'

DATETIME

  1. DATETIME 列可以设置为多个,默认可为null,可以手动设置其值。
  2. DATETIME 列不可设定默认值。
  3. DATETIME 列可以变相的设定默认值,比如通过触发器、或者在插入数据时候,将 DATETIME 字段值设置为 now(),这样可以做到了,尤其是后者,在程序开发中常常用到。

总结

  • DATETIME 类型适合用来记录数据的原始创建时间,因为无论怎么更改记录中其他字段的值,DATETIME 字段的值都不会改变,除非你手动更改它。
  • TIMESTAMP 类型适合用来记录数据的最后修改时间,只要更改了记录中其他字段的值,TIMESTAMP 字段的值都会被自动更新。

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

Live in the future, then build what's missing.