timestamp的自动更新 ON UPDATE CURRENT_TIMESTAMP
最近有一个关于MySQL版本升级的事,涉及到一些关于时间类型的细节问题需要查明,因此到官网找到相关文章,翻出来比较方便自己理解,博客这里也贴一下。
参考官网网址:
https://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
- DATETIME也可以像TIMESTAMP一样将CURRENT_TIMESTAMP设为默认值
- 如果你为此时间列设置了自动更新的属性,那么只要一条记录的其他任何列值发生改变,时间列都会自动更新为CURRENT_TIMESTAMP。
- 默认的,在8.0.2版本之前,如果你未显式的将timestamp设置为NULL,那么timestamp列会被自动设置为not null,给这种字段显式赋NULL值会自动存为current_timestamp 。
- 默认的,在8.0.2版本之前,对于表中的第一个timestamp列,如果你未显式的指定可以为NULL,且未指定默认值,且未指定on update属性,那么这个列会被自动设置为:NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。
- 默认的,在8.0.2版本之前,对于表中的非第一个timestamp列,如果你未显式的指定可以为NULL,且未指定默认值,那么默认值会自动设置为'0000-00-00 00:00:00'。
- 向timestamp插入NULL值不会自动存为current_timestamp啦,如果想要存current_timestamp,那么直接赋值为current_timestamp或者其同义词,例如now().
- timestamp列如果不显式的指定为not null,那么默认就是NULL,想这个列插入NULL值存的就是NULL,而不是current_timestamp。
- 指定not null的timestamp列不再允许插入NULL值,如果你强行为此列插入NULL值,那么要么返回一个错误,要么插入'0000-00-00 00:00:00'(与SQL mode有关)。
- 对于设置了not null且未设置default值的timestamp列,向这种表插入数据时如果未指定timestamp列的值,那么插入结果取决于sql_mode,如果是strict SQL mode那么直接报错,否则插入'0000-00-00 00:00:00'并报一个warning。
- timestamp列不再会被自动设为DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,你必须手动设置。
- 表中的首个timestamp列也不再和其他timestamp列有差别。
因此可以看到explicit_defaults_for_timestamp参数的作用其实就是让你可以自定义timestamp的默认值和NULLABLE属性,mysql不再会自作主张的给你自动设置。
timestamp的自动更新 ON UPDATE CURRENT_TIMESTAMP的更多相关文章
- tk.mybatis通用插件updateByPrimaryKeySelective无法自动更新ON UPDATE CURRENT_TIMESTAMP列的解决办法
tk.mybatis是一个很好用的通用插件,把CRUD这些基本的数据操作全都用动态SQL语句自动生成了,mapper和xml里十分清爽,但是昨天发现有一个小坑,记录在此: 有一张表,结构如下(已经简化 ...
- mysql 添加[取消]timestamp的自动更新
创建自动更新的 timestamp (插入或修改时 uptime都会自动更新) CREATE TABLE `hello` (`id` int(11) NOT NULL,`uptime` timesta ...
- mysql 修改[取消]timestamp的自动更新
创建自动更新的 timestamp (插入或修改时 uptime都会自动更新) CREATE TABLE `hello` ( `id` int(11) NOT NULL, `uptime` times ...
- MySQL的timestamp类型自动更新问题
今天建了一个表,里面有一个列是timestamp类型,我本意是在数据更新时,这个字段的时间能自动更新.岂知对这个类型的值还不甚了解,导致出错.发现这个字段只是在这行数据建立的时候有值,在更新的却无变化 ...
- Intellij IDEA热加载更新 IntelliJ IDEA热加载自动更新(Update classes and resources )
定义及分类 1.1 定义 在web开发环境下,所谓热部署,即在不重新部署webapp的情况下,实时将工程代码改动更新到web容器中(例如tomcat).其原理可以类比ajax的作用,即局部刷新工程资源 ...
- IntelliJ IDEA热加载自动更新(Update classes and resources )
IntelliJ IDEA默认文件是自动保存的,但是手头有个项目jsp文件改动后,在tomcat中不能立即响应变化.想要jsp文件改动后立刻看到变化,可以通过修改配置来实现. ...
- timestamp的两个属性:CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP
timestamp有两个属性,分别是CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP两种,使用情况分别如下: 1. CURRENT_TIMESTAMP 当要 ...
- 最清晰易懂的Mysql CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP区别
timestamp数据类型 Mysql数据库中,当字段类型为timestamp(时间戳)时,如果默认值取CURRENT_TIMESTAMP,则在insert一条记录时,此时的值自动设置为系统当前时间, ...
- MySQL 使用 ON UPDATE CURRENT_TIMESTAMP 自动更新 timestamp (转)
原文地址: https://blog.csdn.net/heatdeath/article/details/79833492 `create_time` timestamp not null defa ...
随机推荐
- WPF RichTextBox 当前光标后一个字符是文档的第几个字符
WPF RichTextBox 当前光标后一个字符是文档的第几个字符 运行环境:Win10 x64, NetFrameWork 4.8, 作者:乌龙哈里,日期:2019-05-05 参考: TextP ...
- delphi 键盘常用参数(PC端和手机端 安卓/IOS)
常数名称(红色手机端) 十六进制值 十进制值 对应按键(手机端) Delphi编程表示(字符串型)_tzlin注 0 0 大键盘Delete键 #0 VK_LBUTTON 1 1 鼠标的左键 #1 V ...
- bzoj1096题解
[解题思路] 预处理spi=∑pj(j∈[1,i]),si=si-1+(xi-xi-1)*spi-1表示把工厂1~i-1的产品都运到工厂i的花费.于是把工厂j+1~i的产品都运到工厂i的花费为si-s ...
- 关于windows下远程连接Linux服务器的方法(CentOs)
1.服务器端安装VNC 1) 安装vncserver yum install -y tigervnc-server 2) 修改配置 vi /etc/sysconfig/vncservers 最后两 ...
- lazyload懒加载和swiper轮播懒加载的用法
对于有较多的图片的网页,使用图片延迟加载,能有效的提高页面加载速度,比如商城网页. lazyload使用方法: 载入 JavaScript 文件: <script src="jquer ...
- delphi 特殊窗体
delphi 窗体阴影 放窗体创建事件里面 SetClassLong(Handle, GCL_STYLE, GetClassLong(Handle, GCL_STYLE) or CS_DROPSHAD ...
- 简介Python正则表达式
一.概念 简单来说正则表达式是由一些普通字符(例如,a 到 z 之间的字母)和一些元字符组成,用来匹配和过滤一些字符串的一种逻辑公式. 二.正则表达式的一些基本规则 1.一些常用的元字符 ^ : ...
- Unity 之旋转
代码如下: bool RotateDelta(Vector3 direction) { direction.y = ; if (direction == Vector3.zero) return tr ...
- 剑指offer——16二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 有可能引起死循环解法: 每次判断最右端是不是1[与 & 1即可],是就cnt++,然后右移一位,直到num为0,结束 ...
- 20140404 OpencvGPU模块 参考文献交叉引用:引用->题注 加入3.1,3.2,3.2编号
1.参考文献交叉引用:引用->题注 2.加入3.1,3.2,3.2编号:开始->段落 3.OpencvGPU模块,编译opencv.sln时记得在库目录中添加D:\opencv\build ...