mysql中日期时间戳timestamp使用小结
timestamp时间戳类型在mysql数据库中比较常见,但是我们很容易忽视它的一些特征,这个我在面试中吃过亏,这里对他的一些用法和特点补充一下。也让自己加深印象。一般来说,我们使用日期,一般采用date,或者datetime,仅仅使用时间的话使用time。
下面大致说明一下timestamp与datetime的区别:
1、他们都可以表示日期时间,默认格式都是"YYYY-MM-DD HH:MM:SS",都可以通过now()或者'20200307225430'或者'2020-03-07 22:54:30'等值来设置值。
2、他们表示的时间范围不同:timestamp表示的是世界标准时间1970-01-01 00:00:01 - 2038-01-19 03:14:07,对于我们中国北京时间(东八区)来说,需要在小时上+8,也就是1970-01-01 08:00:01 - 2038-01-19 11:14:07。而datetime时间范围是1000-01-01 00:00:00 - 9999-12-31 23:59:59。
3、默认情况下,timestamp有默认值current_timestamp,也就是当前时间,然后每次修改的时候,会自动刷新。而datetime除非手动修改值,否则不会自动刷新。
对于设置值,我们通过如下的sql执行结果来看看:
mysql> update users set name='aaaa',create_date=now(),modify_date=now();
Query OK, 3 rows affected (0.05 sec)
Rows matched: 3 Changed: 3 Warnings: 0mysql> select * from users;
+----+------+---------------------+---------------------+
| id | name | create_date | modify_date |
+----+------+---------------------+---------------------+
| 1 | aaaa | 2020-03-07 22:56:53 | 2020-03-07 22:56:53 |
| 2 | aaaa | 2020-03-07 22:56:53 | 2020-03-07 22:56:53 |
| 3 | aaaa | 2020-03-07 22:56:53 | 2020-03-07 22:56:53 |
+----+------+---------------------+---------------------+
3 rows in set (0.00 sec)mysql> update users set name='aaaa',create_date='20200307225730',modify_date=20200307225700;
Query OK, 3 rows affected (0.05 sec)
Rows matched: 3 Changed: 3 Warnings: 0mysql> update users set name='aaaa',create_date='2020-03-07 22:57:30',modify_date='2020-03-07 22:57:00';
Query OK, 0 rows affected (0.05 sec)
Rows matched: 3 Changed: 0 Warnings: 0mysql> select * from users;
+----+------+---------------------+---------------------+
| id | name | create_date | modify_date |
+----+------+---------------------+---------------------+
| 1 | aaaa | 2020-03-07 22:57:30 | 2020-03-07 22:57:00 |
| 2 | aaaa | 2020-03-07 22:57:30 | 2020-03-07 22:57:00 |
| 3 | aaaa | 2020-03-07 22:57:30 | 2020-03-07 22:57:00 |
+----+------+---------------------+---------------------+
3 rows in set (0.00 sec)
对于时间timestamp的时间范围,我们可以通过如下的sql语句来感受一下:
对于最小时间:
mysql> update users set modifydate = '19700101080000' where id = 7;
1292 - Incorrect datetime value: '19700101080000' for column 'modifydate' at row 1
mysql> update users set modifydate = '19700101080001' where id = 7;
Query OK, 0 rows affected
对于最大时间:
mysql> update users set modifydate = '20380119111408' where id = 6;
1292 - Incorrect datetime value: '20380119111408' for column 'modifydate' at row 1
mysql> update users set modifydate = '20380119111407' where id = 6;
Query OK, 0 rows affected
下面我们重点说一下timestamp默认情况以及修改记录时刷新的情况。
默认情况下,我们设置列类型为timestamp不用设置别的默认值,他的默认值就是current_timestamp,以后修改记录的时候,会刷新,我们通过建表语句来感受一下:
默认情况下,我们设置modify_date的时候,就只是指定了timestamp,并没有后面的设置默认值,并在修改的时候指定当前时间。但是我们通过show create table users查看的 sql语句来看,他出现了是指默认值,以及修改记录的时候会刷新。
我们插入一条记录,然后修改记录的名称,看看modify_date的变化:
我们可以在定义表的时候,指定默认值,不指定on update 时刷新,可以让timestamp可以和datetime一样,一经设置,后面只能通过手动修改才能发生改变,而不是自动刷新。
这时候,我们可以检验一下建表语句:
这种情况之下,列定义后面没有on update current_timestamp字样。就不会在修改记录时,自动刷新当前时间了。
还有一种情况是,我们在设置timestamp默认时间的时候,可以设置为0000-00-00 00:00:00,而不是当前时间,后面再修改记录的时候,自动刷新当前时间。虽然timestamp表示的时间范围是1970-01-01 00:00:01开始,但是默认值却可以设置为0000-00-00 00:00:00,也是很奇怪,不过确实可以。我们再修改表结构,插入记录并修改记录:
我们不妨再次查看建表语句,发现这种设置timestamp的方式有什么特别的地方:
我们看到,我们在建表的时候,仅仅指定on update current_timestamp,并没有设置默认值,但是他最后生成的语句中自带了默认值'0000-00-00 00:00:00'。
总结一下就是,timestamp有以下特征:
1、时间范围:1970-01-01 00:00:01 ----- 2038-01-19 03:14:07
2、默认情况下,建表语句仅仅指定timestamp 等价于 timestamp default current_timestamp on update current_timestamp。
他有默认值,就是当前时间,后续修改记录的时候,不用手动指定值,可以自动刷新。
3、可以接受指定值,可以设置修改记录的时候,不刷新,这时候表现就和datetime一样。
4、timestamp on update current_timestamp和timestamp not null default '0000-00-00 00:00:00' on update current_timestamp等价。
mysql中日期时间戳timestamp使用小结相关推荐
- php 时间戳存储 原因,将php文件中的unix时间戳存储到mysql中(store unix timestamp from php file into mysql)...
将php文件中的unix时间戳存储到mysql中(store unix timestamp from php file into mysql) 现在我有这个代码: $mysqldate = date( ...
- mysql中对比月_详解Mysql中日期比较大小的方法
假如有个表product有个字段add_time,它的数据类型为datetime,有人可能会这样写sql: 代码如下 select * from product where add_time = '2 ...
- mysql 日期比较_详解Mysql中日期比较大小的方法
假如有个表product有个字段add_time,它的数据类型为datetime,有人可能会这样写sql: 代码如下 select * from product where add_time = '2 ...
- 详解Mysql中日期比较大小的方法
假如有个表product有个字段add_time,它的数据类型为datetime,有人可能会这样写sql: 代码如下 select * from product where add_time = '2 ...
- 关于MySQL中日期的使用
关于MySQL中日期的使用 1 日期等于\大于\小于 2 日期增加一个时间段 date_add() 3 日期减小一个时间段 date_sub() 4 两个日期相差比较 5 时间截取 6 常见小案例 最 ...
- MySQL中日期时间类型与格式化
关联博文: MySQL中常用函数之日期函数使用详解 [1]MySQL中的日期时间类型 MySQL中常用的几种时间类型有:date.datetime.time.year.timestamp 数据类型 占 ...
- MySQL中日期和时间类型
https://www.cnblogs.com/wlzjdm/p/6953398.html 日期类型 MySql中关于日期的类型有Date/Datetime/Timestamp三种类型. 1.1 Da ...
- MYSQL中日期加减(前一天、后一天等)以及格式化的函数
文章目录 序言 日期的加减 date_add和date_sub 日期的格式化 date_format 日期的差值 datediff timestampdiff 序言 最近在写定时任务,查询条件中反复的 ...
- mysql中日期函数_mysql中日期函数ADDDATE()函数用法大全
摘要: 下文讲述mysql数据库中日期函数ADDDATE方法简介说明,如下所示: ADDDATE函数简介说明 ADDDATE函数是DATE_ADD函数的同义词,具有同样的功能, 其作用为:为指定的日期 ...
最新文章
- 目睹鸿蒙开创四大至高位面,吞噬星空 绝非鸿蒙系列,完结前最后的分析【申精】...
- spring cloud常用组件介绍
- 小师妹学JavaIO之:用Selector来发好人卡
- eureka多了一个莫名其妙的服务_SpringCloud 服务注册与发现组件 Eureka
- LeetCode 2104. 子数组范围和(单调栈)
- wxpython富文本_去除富文本编辑器中的标签
- Oier's little dream
- Python自定义类中定义属性的两种方式
- 安卓miracast花屏_创维酷开电视多屏互动Miracast玩法详解
- C++语音识别接口快速入门(Microsoft Speech SDK)
- 嵌入式Ubuntu 搭建caffee环境
- cad图纸批量转换pdf
- 面完18家大厂的算法岗位,吐血整理了一个面经!
- Swagger2集成JWT登陆步骤,结合Spring拦截器自定义需要登陆的URL
- 【Numpy】np.stack()最通俗易懂解释
- ubuntu16.04安装百度网盘
- Git runner安装
- 怎样使用word模板?两分钟教你搞定!
- 【干货】今日头条的新闻推荐算法原理
- 概率论考点总结类型26 统计中的卡方分布 t分布F分布