您的位置:首页 > 数据库 > MySQL

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

2018-01-26 12:22 501 查看


上图就是我的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

这是我第一次写的博客,有什么地方写的不好,希望各位能给我提提意见,好了,马上过年了,提前祝各位新年快乐
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: