MySQL数据库的时间

mysql 数据库 5.7 版本及以上

一、MYSQL 表示当前时间

  • CURRENT_TIMESTAMP
  • CURRENT_TIMESTAMP()
  • NOW()
  • LOCALTIME
  • LOCALTIME()
  • LOCALTIMESTAMP
  • LOCALTIMESTAMP()
    MySQL数据库的时间

二、MySQL 中更新时间和创建时间的自动更新

需求:

  1. 当新增记录的时候,MySQL 自动将系统的当前时间设置到创建时间和更新时间这两个字段中。
  2. 当更新记录的时候,MySQL 只修改更新时间字段的时间,而不修改创建时间字段对应的值。

创建时间的字段

## 创建时间时,采用默认的加载一个当前的时间(DEFAULT)
`creat_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP

更新时间的字段

## 更新时间时,第一次DEFAULT 执行一次 ,之后ON UPDATE 时再更新
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

这样在插入操作的和更新操作的时候就不需要在代码中对记录设置创建时间和修改时间了。

  • 上述的 SQL 语句未免有些长不容易记忆,我们还可以使用 Navicat 的工具进行,手动加入默认的内容 CURRENT_TIMESTAMP
  • 创建时间
    MySQL数据库的时间
  • 更新时间
    MySQL数据库的时间

datatime和timestamp 的区别

两者都可用来表示YYYY-MM-DD HH:MM:SS[.fraction]类型的日期。

  1. datetime
    占用8个字节,允许为空值,可以自定义值,系统不会自动修改其值,存储的内容与设置的内容一致,与时区无关。
    datetime类型适合用来记录数据的原始的创建时间,因为无论你怎么更改记录中其他字段的值,datetime字段的值都不会改变,除非你手动更改它。
  2. timestamp
    占用4个字节,允许为空值,TIMESTAMP值不能早于1970或晚于2037。这说明一个日期,例如’1968-01-01’,虽然对于DATETIME或DATE值是有效的,但对于TIMESTAMP值却无效,如果分配给这样一个对象将被转换为0。值以UTC格式保存,时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区。
    默认值为CURRENT_TIMESTAMP(),其实也就是当前的系统时间。数据库会自动修改其值,所以在插入记录时不需要指定timestamp字段的名称和timestamp字段的值,只需要在设计表的时候添加一个timestamp字段即可,插入后该字段的值会自动变为当前系统时间。

两者所能存储的时间范围不一样

  1. timestamp所能存储的时间范围为:‘1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’。
  2. datetime所能存储的时间范围为:‘1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’。
    多说一句
  3. DATE 类型用在仅需要日期值时,没有时间部分。MySQL检索并且以’YYYY-MM-DD’格式显示DATE值,支持的范围是’1000-01-01’到’9999-12-31’。