mysql-5.6.35 时间戳的用法简单记录

 

上图就是我的mysql版本。

注意:以下的讲解使用,仅限于mysql-5.6.35,其他的mysql版本不一定适用

第一步,创建一张 test_user表。

语句如下:

 

CREATE TABLE `test_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `create_time` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP,
  `update_time` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;

在  navicat premium mysql视图化软件中如此显示:

 

       此时我们并没有给create_time 和 update_time设置默认值,所以当我们执行  insert into test_user(name) values("张三");

这条语句的时候,最终create_time 和 update_time 字段中存储的数据是datetime的默认值:0000-00-00 00:00:00,

结果如下图所示:

   

   这里会出现一个疑问,为什么我navicat这里面加上了 根据当前时间戳更新的对勾,但是我插入一条语句的时候,时间会是 0000-00-00 00:00:00,

    这个根据当前时间戳更新 和 表创建语句中的  ON UPDATE CURRENT_TIMESTAMP 对应,这个语句代表的意思是当我执行update 的操作的时候,才会将当前的系统时间插入到表中。当我执行insert语句只会插入一条datetime的默认值 0000-00-00 00:00:00。

    所以 当我执行 update test_user set name = "张三3" where id = 3; 这个语句的时候,时间数据就有了

    如图所示:

        

 

但是这里面还有一个要注意的点:

 就是当我们  再次执行 update test_user set name = "张三3" where id = 3; 发现时间没有再次更新跟上图一模一样,

这种情况的原因是因为name中的数据没有发生变化,还是“张三3”的原因,解决的方法也很简单,就是更新的时候我们换个值就可以解决了。让我们使用这个语句执行  update test_user set name = "张三5" where id = 3,结果如下图:

    

        时间发生了改变,只要表中的某一个字段的值发生了变化,update_time的时间才会刷新,否则不会变,如果你想要实现相同数据下update_time时间刷新,那么你可以 update test_user set name = "张三5" ,update_time = now() where id = 3,手动指定update_time的时间即可。

      相信到了现在,大家有了另外一个疑问,create_time的时间也会一直变化,按理说创建时间只有首次添加的时候添加一个时间,之后不可以产生变化,还有添加数据之初,时间都为0000-00-00 00:00:00  那么该怎么解决呢?

    这个时候我们要修改一下表结构了,代码如下:

        

CREATE TABLE `test_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;

navicat 中 create_time字段图片展示:

 

     

update_time字段图片展示:

       

从图片中我们可以发现  update_time 只是去掉了非空,变成了一个允许为空的字段,这样的话,当第一次insert添加时间数据的时候,update_time中显示的是空值,而当update的时候才会让时间进行变化。

而create_time变化较大,他的语法发生了变化,第一,它多了一个默认值  DEFAULT CURRENT_TIMESTAMP,第二 它去掉了

ON UPDATE CURRENT_TIMESTAMP,这样的话,就可以实现第一次添加insert时间数据的时候,不会出现 0000-00-00 00:00:00的情况,而之后在执行update的时候create_time就不会随之变化了。

最后这是一种搭配写法,具体效果可以自己尝试:

`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

这是我第一次写的博客,有什么地方写的不好,希望各位能给我提提意见,好了,马上过年了,提前祝各位新年快乐

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值