MySQL 基础--时间戳类型
时间戳数据存储
- 、TimeStamp的取值范围为'1970-01-01 00:00:01' UTC 至'2038-01-19 03:14:07' UTC;
- 、在存储时间戳数据时先将数据转换为UTC时区,然后计算起毫秒值,再存放到表中;
- 、在读取时间戳数据时先将数据转换为UTC时区,然后转换为本地时区显示给用户;
- 、时间戳类型使用4个字节来存放数据。
时间戳字段定义
- 、时间戳字段包含DEFAULT CURRENT_TIMESTAMP, 表示插入记录行时,如果未对该列指定值,则使用当前时间来为该字段赋值。
- 、时间戳字段包含ON UPDATE CURRENT_TIMESTAMP, 表示在更新记录时,如果为更新该事件戳列,使用当前时间来更新该字段。
- 、当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP,表示该字段仅在插入且未指定值时被赋予当前时间,再更新时且未指定值时不做修改。
- 、当字段定义为timestamp ON UPDATE CURRENT_TIMESTAMP,表示该字段在插入且未指定值时被赋值为"0000-00-00 00:00:00",在更新且未指定值时更新为当前时间。
- 、当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,表示该字段在插入或更新时未指定值,则被赋值为当前时间。
- 、时间戳字段在MySQL 5.5和MySQL 57中隐式默认值为NOT NULL,在MySQL 5.6中隐式默认值为NULL。
- 、在MySQL中,时间戳字段可以被显式插入或更新。
- 、在MySQL中可以定义多个时间戳列。
参数对时间戳的影响
- 当参数explicit_defaults_for_timestamp设置为1时:
- 、TIMESTAMP列如果没有明确指定为NOT NLL则默认为NULL
- 、表中第一个TIMESTAMP列不会自动分配 DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP 属性,需要显式声明。
- 、表中TIMESTAMP列声明为NOT NULL时,不会自动创建默认值
- 当参数explicit_defaults_for_timestamp设置为0时:
- 、TIMESTAMP列如果没有明确指定为NLL,则默认为NOT NULL
- 、如果TIMESTAMP列明确指定为NULL,则会增加默认值NULL
- 、表中的第一个TIMESTAMP列,如果没有声明NULL属性、DEFAULT或者 ON UPDATE,会自动分配 DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP 属性。
- 、表中第二个TIMESTAMP列,如果没有声明为NULL或者DEFAULT子句,会定义为DEFAULT ’-- ::′。插入行时没有指明改列的值,该列默认为’-- ::′,不会产生警告。
- TIMESTAMP列的默认属性严重依赖于参数explicit_defaults_for_timestamp设置,因此建议在创建时显示声明TIMESTAMP列的各项属性,避免因参数设置不同而导致逻辑问题!
时间戳字段在MySQL各版本的差异
- 时间戳字段在MySQL各版本的差异
- 、在MySQL .5及之前版本中,仅能对一个时间戳字段定义DEFUALT CURRENT_TIMESTAMP或ON UPDATE CURRENT_TIMESTAMP,但在MySQL .6和MySQL .7版本中取消了该限制。
- 、在MySQL .6版本中参数explicit_defaults_for_timestamp默认值为1;
- 、在MySQL .7版本中参数explicit_defaults_for_timestamp默认值为0;
- 、当定于c1 timestamp 时,
- 在MySQL .5中等价于`c1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
- 在MySQL .6中等价于`c1` timestamp NULL DEFAULT NULL;
- 在MySQL .7中等价于`c1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
- 、当定于c1 timestamp default 0时,
- 在MySQL .5中等价于`c1` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00';
- 在MySQL .6中等价于`c1` timestamp NULL DEFAULT '0000-00-00 00:00:00';
- 在MySQL .7中等价于`c1` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00';
时间戳建议
- 、在只关心数据最后更新时间的情况下,建议将时间戳列定义为TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
- 、在关心创建时间和更新时间的情况下,将创建时间定义为DAETIME或 TIMESTAMP DEFAULT '0000-00-00 00:00:00',并在插入记录时显式指定创建时间;
- 、建议在表中只定义单个时间戳列,请显式定义DEFAULT 和 ON UPDATE属性;
- 、建议仅在必要的情况下对时间戳列进行显式插入和更新
- 、当time_zone=system的时候,查询timestamp字段,会调用系统的时区值做时区转换,在高并发或大数据量下,可能会触发CPU异常暴涨。
MySQL 基础--时间戳类型的更多相关文章
- MySQL 基础--字符类型
##=====================================================================================## MySQL支持的字符 ...
- mysql基础 日期类型
- mysql 基础,列类型
- Mysql基础1-基础语法-字段类型
主要: 基础 字段类型 基础 基本概念 1) 数据库分类 层次数据库,网状数据库,关系数据库 常见:SQL Server, Oracle,infomix,sybase,ibmDB2,Mysql 2)数 ...
- { MySQL基础数据类型}一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型
MySQL基础数据类型 阅读目录 一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型 一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己 ...
- Mysql的时间戳转date类型
mysql 的 时间戳转date类型 select FROM_UNIXTIME(1491031706235/1000,'%Y-%m-%d') from dual;
- Mysql基础代码(不断完善中)
Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限 ...
- MYSQL基础笔记(六)- 数据类型一
数据类型(列类型) 所谓数据烈性,就是对数据进行统一的分类.从系统角度出发时为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中讲数据类型分成三大类:1.数值类型,2.字符串类型和时间日期 ...
- MYSQL 基础操作
1.MySQL基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t1; --创建一个和t1一样的表,用like(表结构也一样 ...
随机推荐
- python中的__str__()函数
__str__()函数的作用: 不知道大家再写程序是,打印一个实例化对象时,打印的其实时一个对象的地址.而通过__str__()函数就可以帮助我们打印对象中具体的属性值,或者你想得到的东西. 因为再p ...
- model.form使用,配合form的钩子
一次model.form的使用记录,配合form钩子的过程 在写信息采集功能的时候,需要添加资产信息,使用modelform组件减少工作量 官网介绍:版本1.9.https://docs.django ...
- RAD Studio 10.3 来了
官方原版下载链接:HTTP FTP 官方更新说明:http://docwiki.embarcadero.com/RADStudio/Rio/en/What's_New [官方更新说明简译]1.Delp ...
- JavaScript: Constructor and Object Oriented Programming
Constructor : Grammar: object.constructor Example: Javascript code: 1 function obj1() { this.number ...
- GDI+_SavePic
Option Explicit Private Const EncoderQuality As String = "{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB ...
- 用java开发图形界面项目,如何实现从本地选择图片文件并以二进制流的形式保存到MySQL数据库,并重新现实到面板
- AFNetWorking 源码粗浅理解
最近在看AFNetWorking的源码,整理出自己的一点思路.先从一个最简单的网络请求看: NSString *urlStr = [NSString stringWithFormat:@"h ...
- mybatis的基础Dao
话不多说,直接贴代码吧,因为很多博客都需要用到这个基础dao,怕大家不好查询. 这个基类主要是使用了泛型,这样我就不必为每一个实体都写一个dao,大大节省了时间.其中sqlSessionTemplat ...
- iview表格高度自适应只需要三步即可
1. 需要增加到table表格里的 highlight-row :height="tableHeight" ref="table" 2.在return 定义一个 ...
- Myisam 和 Innodb 区别
MySQL默认采用的是MyISAM. MyISAM不支持事务,而InnoDB支持.InnoDB的AUTOCOMMIT默认是打开的,即每条SQL语句会默认被封装成一个事务,自动提交,这样会影响速度,所以 ...