查询两个时间戳不起作用

时间:2012-07-09 18:07:44

标签: mysql timestamp

  

可能重复:
  MySQL CURRENT_TIMESTAMP as DEFAULT

我正在尝试创建表格

CREATE TABLE myTable1 
(
 id INT,
 date_validated TIMESTAMP,
 date_registered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
然而,它不起作用。我得到错误

Incorrect table definition; there can be only one TIMESTAMP column 
with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

当我切换两个时间戳语句(如下所示)时,它正在工作。

CREATE TABLE myTable1 
(
 id INT,
 date_registered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
 date_validated TIMESTAMP
);

知道为什么会这样吗?

这对我来说很奇怪,从未遇到过这样的问题。

sqlfiddle demo to check queries

1 个答案:

答案 0 :(得分:3)

TIMESTAMP实际上类似于一个DATETIME,但是您声明的第一个TIMESTAMP会自动初始化:

http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html

因此,当您第一次编写没有属性的TIMESTAMP时,MySQL会在内部添加“DEFAULT CURRENT_TIMESTAMP”进行转换。当MySQL遇到你明确设置CURRENT_TIMESTAMP的第二个TIMESTAMP时,就会发生冲突。

如果你在第一行定义了CURRENT_TIMESTAMP,那么它就是多余的 - 因为你在第二行中没有指定任何内容,所以第二行没有指定任何默认值,也不会发生冲突。

从上面的链接中,“它不必是表中第一个自动初始化或更新为当前时间戳的TIMESTAMP列。但是,要指定自动初始化或更新其他TIMESTAMP列,必须禁止自动第一个属性。“