MySQL 基础--时间戳类型

时间戳数据存储

1、TimeStamp的取值范围为‘1970-01-01 00:00:01‘ UTC 至‘2038-01-19 03:14:07‘ UTC;
2、在存储时间戳数据时先将数据转换为UTC时区,然后计算起毫秒值,再存放到表中;
3、在读取时间戳数据时先将数据转换为UTC时区,然后转换为本地时区显示给用户;
4、时间戳类型使用4个字节来存放数据。

时间戳字段定义

1、时间戳字段包含DEFAULT CURRENT_TIMESTAMP, 表示插入记录行时,如果未对该列指定值,则使用当前时间来为该字段赋值。
2、时间戳字段包含ON UPDATE CURRENT_TIMESTAMP, 表示在更新记录时,如果为更新该事件戳列,使用当前时间来更新该字段。
3、当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP,表示该字段仅在插入且未指定值时被赋予当前时间,再更新时且未指定值时不做修改。
4、当字段定义为timestamp ON UPDATE CURRENT_TIMESTAMP,表示该字段在插入且未指定值时被赋值为"0000-00-00 00:00:00",在更新且未指定值时更新为当前时间。
5、当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,表示该字段在插入或更新时未指定值,则被赋值为当前时间。
6、时间戳字段在MySQL 5.5和MySQL 57中隐式默认值为NOT NULL,在MySQL 5.6中隐式默认值为NULL。
7、在MySQL中,时间戳字段可以被显式插入或更新。
8、在MySQL中可以定义多个时间戳列。

参数对时间戳的影响

当参数explicit_defaults_for_timestamp设置为1时:
1、TIMESTAMP列如果没有明确指定为NOT NLL则默认为NULL
2、表中第一个TIMESTAMP列不会自动分配 DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP 属性,需要显式声明。
3、表中TIMESTAMP列声明为NOT NULL时,不会自动创建默认值

当参数explicit_defaults_for_timestamp设置为0时:
1、TIMESTAMP列如果没有明确指定为NLL,则默认为NOT NULL
2、如果TIMESTAMP列明确指定为NULL,则会增加默认值NULL
3、表中的第一个TIMESTAMP列,如果没有声明NULL属性、DEFAULT或者 ON UPDATE,会自动分配 DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP 属性。
4、表中第二个TIMESTAMP列,如果没有声明为NULL或者DEFAULT子句,会定义为DEFAULT ’0000-00-00 00:00:00′。插入行时没有指明改列的值,该列默认为’0000-00-00 00:00:00′,不会产生警告。

TIMESTAMP列的默认属性严重依赖于参数explicit_defaults_for_timestamp设置,因此建议在创建时显示声明TIMESTAMP列的各项属性,避免因参数设置不同而导致逻辑问题!

时间戳字段在MySQL各版本的差异

时间戳字段在MySQL各版本的差异
1、在MySQL 5.5及之前版本中,仅能对一个时间戳字段定义DEFUALT CURRENT_TIMESTAMP或ON UPDATE CURRENT_TIMESTAMP,但在MySQL 5.6和MySQL 5.7版本中取消了该限制。
2、在MySQL 5.6版本中参数explicit_defaults_for_timestamp默认值为1;
3、在MySQL 5.7版本中参数explicit_defaults_for_timestamp默认值为0;

4、当定于c1 timestamp 时,
    在MySQL 5.5中等价于`c1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
    在MySQL 5.6中等价于`c1` timestamp NULL DEFAULT NULL;
    在MySQL 5.7中等价于`c1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

5、当定于c1 timestamp default 0时,
    在MySQL 5.5中等价于`c1` timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00‘;
    在MySQL 5.6中等价于`c1` timestamp NULL DEFAULT ‘0000-00-00 00:00:00‘;
    在MySQL 5.7中等价于`c1` timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00‘;

时间戳建议

1、在只关心数据最后更新时间的情况下,建议将时间戳列定义为TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
2、在关心创建时间和更新时间的情况下,将创建时间定义为DAETIME或 TIMESTAMP DEFAULT ‘0000-00-00 00:00:00‘,并在插入记录时显式指定创建时间;
3、建议在表中只定义单个时间戳列,请显式定义DEFAULT 和 ON UPDATE属性;
4、建议仅在必要的情况下对时间戳列进行显式插入和更新
5、当time_zone=system的时候,查询timestamp字段,会调用系统的时区值做时区转换,在高并发或大数据量下,可能会触发CPU异常暴涨。

原文地址:https://www.cnblogs.com/TeyGao/p/9119597.html

时间: 2024-10-08 11:02:12

MySQL 基础--时间戳类型的相关文章

MySQL 基础--字符类型

MySQL支持的字符类型: 类型 大小 用途 CHAR 0-255字节 定长字符串 VARCHAR 0-65535 字节 变长字符串 TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串 TINYTEXT 0-255字节 短文本字符串 BLOB 0-65 535字节 二进制形式的长文本数据 TEXT 0-65 535字节 长文本数据 MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据 MEDIUMTEXT 0-16 777 215字节 中等长度文本

mysql基础 日期类型

原文地址:https://www.cnblogs.com/angdh/p/10652414.html

MySQL基础实战

一.数据库基础: DBMS:数据库管理系统(Database Management System) RDBMS:关系数据库管理系统(Relational Database Management System) C/S:通过专有协议 关系模型:表(行,列),二维关系 范式:第一范式,第二范式,第三范式: 关系运算: 选择 投影 数据库:表,索引,视图(虚表) SQL:结构化查询语言 DDL:数据定义语言 DML:数据操作语言 编程接口: 自行定义存储过程 自行定义存储函数 触发器: 时间调度器:类

mySQL基础

一.数据库概述 数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合.(文件系统) 数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立.使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性.用户通过数据库管理系统访问数据库中的数据. 数据库软件应该为数据库管理系统,数据库是通过数据库管理系统创建和操作的. 数据库:存储.维护和管理数

mysql基础和数据库的优化

Mysql基础... 4 Mysql介绍... 4 登录mysql mysql –u root –p[掌握]... 4 SQL语言... 4 DCL. 4 grant. 4 revoke. 4 DDL. 4 建库... 4 删库... 4 建表... 4 看表结构... 5 删表... 5 修改表... 5 DML[重点]... 5 增加... 5 删除... 5 修改... 5 查看... 5 排序... 5 总数... 5 求和... 5 平均... 6 最大... 6 最小... 6 表连

Mysql基础代码(不断完善中)

Mysql基础代码,不断完善中~ 1 //语法错误(syntax error)在语法分析阶段,源代码并未被执行,故不会有任何输出. 2 3 4 /* [命名规则] */ 5 常量名 类常量建议全大写,单词间用下划线分隔 // MIN_WIDTH 6 变量名建议用下划线方式分隔 // $var_name 7 函数名建议用驼峰命名法 // varName 8 定界符建议全大写 // <<<DING, <<<'DING' 9 文件名建议全小写和下划线.数字 // func_n

mysql基础之基本数据类型

原文:mysql基础之基本数据类型 列类型学习 mysql三大列类型 整型 Tinyint/ smallint/ mediumint/int/ bigint(M) unsigned zerofill 字符串型 Char(M) Varchar(M) Text 文本类型 日期时间类型 Date 日期 Time 时间 Datetime 时间时间类型 Year 年类型 整形: 整型系列所占字节与存储范围的关系. 定性: 占字节越多,存储范围越大. 下图: 是具体的数字分析 Tinyint 1个字节 8个

MYSQL 基础操作

1.MySQL基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t1; --创建一个和t1一样的表,用like(表结构也一样) insert into t3 select * from t1; --t1的数据全部拿过来,注意是表结构一致才select* ,否则选择相应的的字段列插入 create table t1( id int unsigned not null auto_increment primary key,

JavaSE基础篇—MySQL基础知识点

MySQL MySQL是一种关系数据库管理系统,是一种开源软件.可搭配PHP和Apache可以有更好的性能,也可以工作在众多的平台上.Orcale是一个数据库创建多个用户,MySQL是一个用户创建多个数据库. 安装注意事项: 端口:3306:默认用户:root:字符集:设置为gbk或者utf-8: 安装时可以启用远程登陆,创建匿名用户: 可以安装图形化界面,方便操作 MySQL列的类型: 数值类型: smallint():占2个字节 int():占4个字节,integer是int的同义词,也是占