MySQL timestamp自动生成时间,自动更新时间。实战

CREATE TABLE `test`
 (    `CreateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
   `ModiTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) 
   ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

话不多说先上配置。
这个配置必须是timestamp 类型,不能使用datatime,因为使用datatime会报错“值不能为空”

NOT NULL DEFAULT CURRENT_TIMESTAMP:值不能为空 默认值为当前时间

NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP:值不能为空 默认值为当前时间,且如果数据更新的话值回更新为当前时间

这里两个配置的用法就像我上面的一个可以作为创建时间,一个可以作为更改时间使用。
这里要强调一下,如果更新的时候ModiTime字段是有值的,那是不会更新的,更新的时候要保持ModiTime=null。

在这里楼主说一下,楼主项目用的是jpa,所以这里如果使用

DEFAULT CURRENT_TIMESTAMP

是不能达到预期效果的,因为jpa,jpa,jpa 会给我注入null值。所以需要使用

NOT NULL

来抬一手。
这里可能就有同学问问题了,如果使用了NOT NULL那插入的时候不就是空,不就会报错了吗。
其实不然,我们来看一下运行的顺序。

  1. 运行jpa 写入空值,本来应该报错,因为数据库非空
  2. 数据库发现有配置默认值,写入默认值,
  3. 运行正常

你可能感兴趣的:(Mysql,timestamp,自动更新时间,自动生成时间,数据库)