MySQL之timestamp

在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)