MySQL的timestamp类型自动更新问题
今天建了一个表,里面有一个列是timestamp类型,我本意是在数据更新时,这个字段的时间能自动更新。岂知对这个类型的值还不甚了解,导致出错。发现这个字段只是在这行数据建立的时候有值,在更新的却无变化。
查找资料,发现是我建表的语句有问题:
以下是代码片段:
CREATE TABLE `test` (`t1` timestamp NOT NULL default CURRENT_TIMESTAMP,`ww` varchar(5) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
而实际上,以下两个建表语句的效果是一样的:
CREATE TABLE `test` (`t1` TIMESTAMP NOT NULL ,`ww` VARCHAR( 5 ) NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `test`
( `t1` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, `ww` varchar(5) NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
比较之下,我的语句少了“on update CURRENT_TIMESTAMP”或多了“default CURRENT_TIMESTAMP”。如此一来,这个timestamp字段只是在数据insert的时间建立时间,而update时就不会有变化了。
在CREATE TABLE语句中,timestamp列可以用下面的任何一种方式声明:
- 如果定义时DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP子句都有,列值为默认使用当前的时间戳,并且自动更新;
- 如果不使用DEFAULT或ON UPDATE子句,那么它等同于DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
- 如果只有DEFAULT CURRENT_TIMESTAMP子句,而没有ON UPDATE子句,列值默认为当前时间戳但不自动更新;
- 如果没用DEFAULT子句,但有ON UPDATE CURRENT_TIMESTAMP子句,列默认为0并自动更新;
- 如果有一个常量值DEFAULT,该列会有一个默认值,而且不会自动初始化为当前时间戳。如果该列还有一个ON UPDATE CURRENT_TIMESTAMP子句,这个时间戳会自动更新,否则该列有一个默认的常量但不会自动更新
换句话说,你可以使用当前的时间戳去初始化值和自动更新,或者是其中之一,也可以都不是。(比如,你在定义的时候可以指定自动更新,但并不初始化。)下面的字段定义说明了这些情况:
自动初始化和更新:
`ts` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP只自动初始化:
`ts` timestamp DEFAULT CURRENT_TIMESTAMP只自动更新
`ts` TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP只是给一个常量(注:0000-00-00 00:00:00)
`ts` timestampDEFAULT 0
注意:如果不使用DEFAULT或ON UPDATE子句,那么它等同于DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
示例:
CREATE TABLE `test` (`ww` VARCHAR( 9 ) NOT NULL ,`t1` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,`t2` TIMESTAMP NOT NULL
) ENGINE = MYISAM
这个情况下,数据插入时,t1会记录当前时间,t2为默认值(0000-00-00 00:00:00),等同下面的语句:
CREATE TABLE `test` (`ww` VARCHAR( 9 ) NOT NULL ,`t1` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,`t2` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE = MYISAM
根据上面注意事项,示例的创表语句完整的语句应当为:
CREATE TABLE `test` (`ww` VARCHAR( 9 ) NOT NULL ,`t1` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,`t2` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE = MYISAM
曾经想这样设计一个表,这个表有两个timestamp列,一个可以记录更新时间,一个可以记录初始时间,但是尝试多次以后,我发现mysql好像做不到这一点,不知道这个是mysql的缺陷还是自我优化,因为,这个功能可以使用datetime实现记录初始化的时间,只是需要insert的时候指定一下.
MySQL的timestamp类型自动更新问题相关推荐
- mysql timestamp 转型_MySQL的timestamp类型自动更新问题【转】
今天建了一个表,里面有一个列是timestamp类型,我本意是在数据更新时,这个字段的时间能自动更新.岂知对这个类型的值还不甚了解,导致出错.发现这个字段只是在这行数据建立的时候有值,在更新的却无变化 ...
- mysql中timestamp的自动生成与更新
转自:mysql中timestamp的自动生成与更新 MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样. 1.自动UPDATE 和INSERT 到当前的时间: 表: -------- ...
- MYSQL中TIMESTAMP类型的默认值
MYSQL中TIMESTAMP类型的默认值 MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样. 1.自动UPDATE 和INSERT 到当前的时间: 表: ---------- ...
- MySQL的timestamp类型存储时间范围为什么是2038年之内
MySQL的timestamp类型,存储的是一个整型int数据,由于int是有大小范围的,最多存大约21亿的数据,timestamp存储的数据所以被限制在了1970~2038年之内.
- mysql的timestamp类型_MySQL数据库中的timestamp类型与时区
MySQL的timestamp类型时间范围between '1970-01-01 00:00:01' and '2038-01-19 03:14:07',超出这个范围则值记录为'0000-00-00 ...
- mysql中timestamp类型数据查找中出现的问题
mysql中查找timestamp类型的数据,不要把参数弄成timestamp类型,直接string类型就可以,而且,timestamp类型的tostring方法要先看看是不是得到的就是想要的stri ...
- mysql 日期时间类型 自动转型 及 运算
日期时间类型自动转型 -- now().字符串.数字转datetime类型 create table t(dt datetime); insert into t values(now()); inse ...
- mysql建立的一个自动更新组织树案案例
组织树实现案例 一.实现功能: 根据组织基表organizitions,更新组织树子树表orgs,子树表包括每个组织树的节点为顶点子树,以及带层级格式子树.新增,删除,修改组织树基表organizit ...
- 【mysql 时间戳】mysql时间戳timestamp类型 时间不对
我的服务器就孟买的,数据库设置的CURRENT_TIMESTAMP,时间老是和系统时间不对,原来需要设置数据库时间,设置如下: 服务端timestamp 写入 mysql 设置的timestamp , ...
最新文章
- oracle 显示格式化
- 常用命令之------tcpdump
- 未来的地下世界?《明日之后》打造专属半感染者的“未来都市”
- Map 3D中程序设置地图中心点
- 关于windows消息机制的猜想
- .NET Core 微服务之Polly熔断策略
- pca 矩阵 迹_主成分分析法(PCA)推导
- large计算机应用,cies - 计算机应用.pdf
- win7 安装ss
- xshell卸载注册表删除问题
- vue-baidu-map 百度地图(定位替换图标,添加标签)
- java sort 降序_详解Java sort()数组排序(升序和降序)
- PyQT5打包后报错:Could not find QtWebEngineProcess.exe
- linux 销毁 文件,彻底删除Linux文件的方法汇总
- 完爆90%的数据库性能毛病!
- 如何连接到GBase的XDM服务器
- css如何让文本框中的输入的文字始终垂直居中
- 网上商城小程序(小程序+PHP)
- PTA基础编程题目集 7-20 打印九九口诀表 (15分)
- 看程序员奶爸是如何通过代码给宝宝起名的~
热门文章
- Spark集群,多个版本Python/Python Package管理
- 嵌入式linux 试卷,嵌入式Linux模拟试卷
- php截断上传,截断在文件包含和上传中的利用
- 运行返回签名不正确_如果调用约定不匹配,会发生什么?
- vue css load,vue css3loadding插件的开发以及npm包的发布管理
- jsp判断json第一位_java 判断字符串是否为json格式
- c语言opengles程序,OpenGL ES _ 着色器_程序
- python海龟编辑器画小汽车_【海龟编辑器下载】海龟编辑器(Python编辑器) v1.3.4 官方免费版-趣致软件园...
- 企业微信:腾讯的“佛系”办公江湖
- 计算机基础知识二进制转换,计算机基础知识数制转换