2

可能重复:
MySQL CURRENT_TIMESTAMP 作为 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 演示

4

1 回答 1

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 列指定自动初始化或更新,您必须抑制第一。”

于 2012-07-09T18:12:23.767 回答