在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
网友评论