首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL timestamp类型列自动更新

MySQL中使用timestamp定义字段,默认情况下会给字段添加自动更新属性,本文将分析这个自动更新设置。...刨根问底 在create table语句中,对第一个出现timestamp类型字段定义会有如下几种情况: 使用DEFAULT CURRENT_TIMESTAMP,表示列为当前时间戳但不会自动更新;...使用DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,表示列为当前时间戳并且自动更新,也就是每次更新记录都会自动更新该列为当前时间戳; 没有使用...对于使用DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP进行定义列,需要注意是如果该字段没有发生变化,将不会进行更新,而且对于多个使用DEFAULT...CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP进行定义列,mysql只会更新第一个使用它定义列。

3.6K70
您找到你想要的搜索结果了吗?
是的
没有找到

Mysql - date、datetime、timestamp 区别

date、datetime 区别 顾名思义,date 日期,datetime 日期时间,所以 date 是 datetime 日期部分 MySQL 以 格式检索和显示 datetime YYYY-MM-DD...可以包括尾部小数秒部分 精度最高可达微秒(6 位小数位) 插入到 datetime 或 timestamp任何小数部分都会被保留而不是被丢弃 保留小数部分后,格式变成 YYYY-MM-DD...范围变成 1970-01-01 00:00:01.000000 ~ 2038-01-19 03:14:07.999999 datetime 和 timestamp 区别二:时区 因为 timestamp...存储是 UTC 时间,所以会有时区概念,这也是区别于 datetime 地方之一 MySQL 对于 timestamp 字段,会将客户端插入时间从当前时区转换为 UTC 再进行存储;查询时,会从...timestamp:4 个字节 datetime:5 个字节(有些教程会写 8 个,但官方文档目前 mysql8 中 datetime 是 5 个字节进行存储) 重点 它们在保存小数秒时,都将使用额外空间

5.8K10

MySQL中DATETIME与TIMESTAMP

“温故而知新” 真理永远都不过时,今天由于工作事情涉及到了这里,印象中只记得DATETIME类型占用8字节,TIMESTAMP类型占用4字节,心想这么久没有更新知识万一过时了咋办,毕竟MySQL8都有了...,于是翻开了MySQL官网,决定查一查这两个字段区别。...余数总是小于除数,月份最大12,所以选择13作为除数,这就是为什么是用13乘以年加上月份,得到存储。...计算速度有了一定提升;TIMESTAMP使用到2038年1月19号就到终点站了…… 希望大家项目到那时还存在,我也是~~ ---- 贴出官网文档: 底层算法和结构:https://dev.mysql.com...PS:右上角可以选择文档版本,查看不同版本MySQL区别。

2.5K50

MySQL中DATETIME与TIMESTAMP

,毕竟MySQL8都有了,于是翻开了MySQL官网,决定查一查这两个字段区别。...打开官网,扑面而来英文字母刺眼睛生疼,揉了揉眼睛,定心下来查一查。 官网这么大,怎么搜,想起来目前在用MySQL 5.7版本,那就先查查5.7版本文档吧。 废话不多说,先把结果拿出来。...余数总是小于除数,月份最大12,所以选择13作为除数,这就是为什么是用13乘以年加上月份,得到存储。...计算速度有了一定提升;TIMESTAMP使用到2038年1月19号就到终点站了…… 希望大家项目到那时还存在,我也是~~ ---- 贴出官网文档: 底层算法和结构:https://dev.mysql.com...PS:右上角可以选择文档版本,查看不同版本MySQL区别。 再见~

2.2K20

MySQL 8.0 timestamp引发狗血剧情

;迁移新环境是MySQL 8.0版本,而线上环境是5.7版本,两个版本中参数explicit_defaults_for_timestamp 设置默认是不一样; 关于MySQL 8.0版本时间类型详细可参考...:MySQL 8.0中DATE,DATETIME和 TIMESTAMP类型和5.7之间差异 原因: explicit_defaults_for_timestamp 系统变量决定MySQL服务端对timestamp...此变量自MySQL 5.6.6 版本引入,分为全局级别和会话级别,可动态更新,默认为OFF。...在8.0之中默认改为了on explicit_defaults_for_timestamp=OFF,表示使用默认timestamp默认格式;timestamp类型默认格式是什么样呢?...做这样字段转化,会把原本该字段为null都转化为CURRENT_TIMESTAMP,如果历史数据多化,这样转化是非常耗资源。同时还需考虑转变对业务带来影响。

1.4K20

小白学习MySQL - TIMESTAMP类型字段非空和默认属性影响

前几天读了一篇文章《故障分析 | MySQL 迁移后 timestamp 列 cannot be null》,没想到这两天就碰到了很相近问题。...库时,如果表中含有TIMESTAMP数据类型、缺省为current_timestamp字段,这些表同步任务就都失败了,而另外一些包含了DATETIME数据类型表就同步成功了,不知道这是不是MySQL...MySQL是否为TIMESTAMP默认和NULL处理启用某些非标准行为, https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html...给这样列分配一个NULL是允许,并将该列设置为current timestamp。...目标库MySQL 5.7.20explicit_defaults_for_timestamp是默认OFF,结合上述规则,就可以模拟复现上述问题了。

4.6K40

技术分享 | MySQL TIMESTAMP 类型字段非空和默认属性影响

同事说他通过某款商业数据同步软件将一个 MySQL 5.7.28 库同步到 MySQL 5.7.20 库时,如果表中含有 TIMESTAMP 数据类型、缺省为 current_timestamp...MySQL 是否为 TIMESTAMP默认和 NULL 处理启用某些非标准行为: https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html...给这样列分配一个 NULL 是允许,并将该列设置为 current timestamp 。...目标库 MySQL 5.7.20 explicit_defaults_for_timestamp 是默认 OFF ,结合上述规则,就可以模拟复现上述问题了。...DEFAULT '0000-00-00 00:00:00',但是这个 MySQL 5.7.20 sql_mode 变量包含了 NO_ZERO_DATE 规则,因此默认'0000-00-00 00

5K20

MySQL timestamp NOT NULL插入NULL问题

explicit_defaults_for_timestamp MySQL 5.6版本引入 explicit_defaults_for_timestamp 来控制对timestamp NULL处理...如果该参数不开启,则对timestamp NOT NULL插入NULL,不报错,无warning,插入后为当前时间 如果在my.cnf中explicit_defaults_for_timestamp...=1 那么插入该时候会报错提示该列can not be null 建议开启该 mysql> show variables like '%explicit_defaults_for_timestamp...插入NULL变为当前时间,并没有被NOT NULL所限制 且该是无法动态修改,必须重启库才可以变更 mysql> set global explicit_defaults_for_timestamp...,但由于explicit_defaults_for_timestamp没有开启,插入NULL不报错,且也插入了当前时间 explicit_defaults_for_timestamp = 1 insert

2.6K40
领券