美文网首页
MySQL之timestamp

MySQL之timestamp

作者: 田真的架构人生 | 来源:发表于2017-08-02 21:23 被阅读0次

    在mysql中,timestamp是经常用到的类型,大小是4个字节,取值范围是1970-2038。如果一个表中有多列timestamp字段,在使用的时候需要注意一些细节。

    CREATE TABLE `test2` (
      id INT(11) NOT NULL,
      t1 TIMESTAMP,
      t2 TIMESTAMP,
      PRIMARY KEY (id)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8
    

    创建一个表,两个timestamp字段,t1、t2什么约束都不写,那么建表以后,查看表的DDL信息会是这样:

    CREATE TABLE `test2` (
      id int(11) NOT NULL,
      t1 timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      t2 timestamp NOT NULL DEFAULT \'0000-00-00 00:00:00\',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    

    可以看到,什么都不写,第一个timestamp字段默认就是DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;而第二个timestamp字段默认是0。
    如果t1、t2我都手动指定DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP呢?效果会怎样?
    结果,MySQL会报错,创建失败!

    CREATE TABLE `test2` (
      `id` INT(11) NOT NULL,
      `t1` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      `t2` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8
    
    1 queries executed, 0 success, 1 errors, 0 warnings
    查询:CREATE TABLE `test2` ( `id` int(11) NOT NULL, `t1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `t2...
    错误代码: 1293
    Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
    执行耗时 : 0 sec
    传送时间 : 0 sec
    总耗时 : 0.004 sec
    

    错误提示:只允许一个timestamp字段(默认第一个)能够利用CURRENT_TIMESTAMP,不管是default,还是on update。

    ==================================================================
    但是在MySQL 5.7下,就没有这样的限制了,可以同时允许多个字段设置CURRENT_TIMESTAMP以及ON UPDATE CURRENT_TIMESTAMP

    相关文章

      网友评论

          本文标题:MySQL之timestamp

          本文链接:https://www.haomeiwen.com/subject/yvnylxtx.html