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
这是我第一次写的博客,有什么地方写的不好,希望各位能给我提提意见,好了,马上过年了,提前祝各位新年快乐
相关文章推荐
- 简单记录mysql left join,right join,inner join用法
- 10个mysql中select语句的简单用法
- Perl简单用法:命令行参数、连接数据库mysql、DNS查询、发送邮件
- ASP.net 中的AJAX学习记录之四 updateProgress控件的简单用法
- 从头认识Spring-3.2 简单的AOP日志实现-需要记录方法的运行时间
- mysql如何记录sql执行时间
- mysql 查看表记录新增、修改的时间
- MySQL临时表的简单用法
- 史上最简单的 MySQL 教程(十二)「记录长度」
- 简单记录下VC中常用的播放音频API用法
- Mysql Date_format 及时间相关用法
- mssql存储过程转为mysql 的一些细节, 浪费了不少时间,在此做下记录
- MySql 分组排序取时间最大的一条记录
- mysql 时间函数用法 集合
- 关于mysql服务启动后又停止的错误的简单记录
- mysql 添加时间列(用于记录创建时间和修改时间)
- 【MYSQL】基础SQL语句总结(三)筛选记录基本用法
- mysql之TIMESTAMP(时间戳)用法详解
- mysql之TIMESTAMP(时间戳)用法详解
- ASP.net 中的AJAX学习记录之四 updateProgress控件的简单用法