今天建了一个表,里面有一个列是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类型自动更新问题相关推荐

  1. mysql timestamp 转型_MySQL的timestamp类型自动更新问题【转】

    今天建了一个表,里面有一个列是timestamp类型,我本意是在数据更新时,这个字段的时间能自动更新.岂知对这个类型的值还不甚了解,导致出错.发现这个字段只是在这行数据建立的时候有值,在更新的却无变化 ...

  2. mysql中timestamp的自动生成与更新

    转自:mysql中timestamp的自动生成与更新 MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样. 1.自动UPDATE 和INSERT 到当前的时间: 表: -------- ...

  3. MYSQL中TIMESTAMP类型的默认值

    MYSQL中TIMESTAMP类型的默认值    MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样. 1.自动UPDATE 和INSERT 到当前的时间: 表: ---------- ...

  4. MySQL的timestamp类型存储时间范围为什么是2038年之内

    MySQL的timestamp类型,存储的是一个整型int数据,由于int是有大小范围的,最多存大约21亿的数据,timestamp存储的数据所以被限制在了1970~2038年之内.

  5. mysql的timestamp类型_MySQL数据库中的timestamp类型与时区

    MySQL的timestamp类型时间范围between '1970-01-01 00:00:01' and '2038-01-19 03:14:07',超出这个范围则值记录为'0000-00-00  ...

  6. mysql中timestamp类型数据查找中出现的问题

    mysql中查找timestamp类型的数据,不要把参数弄成timestamp类型,直接string类型就可以,而且,timestamp类型的tostring方法要先看看是不是得到的就是想要的stri ...

  7. mysql 日期时间类型 自动转型 及 运算

    日期时间类型自动转型 -- now().字符串.数字转datetime类型 create table t(dt datetime); insert into t values(now()); inse ...

  8. mysql建立的一个自动更新组织树案案例

    组织树实现案例 一.实现功能: 根据组织基表organizitions,更新组织树子树表orgs,子树表包括每个组织树的节点为顶点子树,以及带层级格式子树.新增,删除,修改组织树基表organizit ...

  9. 【mysql 时间戳】mysql时间戳timestamp类型 时间不对

    我的服务器就孟买的,数据库设置的CURRENT_TIMESTAMP,时间老是和系统时间不对,原来需要设置数据库时间,设置如下: 服务端timestamp 写入 mysql 设置的timestamp , ...

最新文章

  1. oracle 显示格式化
  2. 常用命令之------tcpdump
  3. 未来的地下世界?《明日之后》打造专属半感染者的“未来都市”
  4. Map 3D中程序设置地图中心点
  5. 关于windows消息机制的猜想
  6. .NET Core 微服务之Polly熔断策略
  7. pca 矩阵 迹_主成分分析法(PCA)推导
  8. large计算机应用,cies - 计算机应用.pdf
  9. win7 安装ss
  10. xshell卸载注册表删除问题
  11. vue-baidu-map 百度地图(定位替换图标,添加标签)
  12. java sort 降序_详解Java sort()数组排序(升序和降序)
  13. PyQT5打包后报错:Could not find QtWebEngineProcess.exe
  14. linux 销毁 文件,彻底删除Linux文件的方法汇总
  15. 完爆90%的数据库性能毛病!
  16. 如何连接到GBase的XDM服务器
  17. css如何让文本框中的输入的文字始终垂直居中
  18. 网上商城小程序(小程序+PHP)
  19. PTA基础编程题目集 7-20 打印九九口诀表 (15分)
  20. 看程序员奶爸是如何通过代码给宝宝起名的~

热门文章

  1. Spark集群,多个版本Python/Python Package管理
  2. 嵌入式linux 试卷,嵌入式Linux模拟试卷
  3. php截断上传,截断在文件包含和上传中的利用
  4. 运行返回签名不正确_如果调用约定不匹配,会发生什么?
  5. vue css load,vue css3loadding插件的开发以及npm包的发布管理
  6. jsp判断json第一位_java 判断字符串是否为json格式
  7. c语言opengles程序,OpenGL ES _ 着色器_程序
  8. python海龟编辑器画小汽车_【海龟编辑器下载】海龟编辑器(Python编辑器) v1.3.4 官方免费版-趣致软件园...
  9. 企业微信:腾讯的“佛系”办公江湖
  10. 计算机基础知识二进制转换,计算机基础知识数制转换