0

我正在尝试创建一个包含两个时间戳列的表,一个用于创建行时,另一个用于更新行时。这是我到目前为止所尝试的:

CREATE TABLE `tmp` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `data` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
   `created` timestamp NOT NULL ,
   `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

但我收到了这个错误:

表定义不正确;在 DEFAULT 或 ON UPDATE 子句中只能有一个带有 CURRENT_TIMESTAMP 的 TIMESTAMP 列

4

3 回答 3

1

这是一个 MYSQL 约束,您只能拥有一个默认值为 systime 的列。

这个问题也可以参考 How to add "ON update current timestamp" to existing table column

于 2012-11-22T18:43:54.300 回答
1

您可以在 MySQL 5.6 中执行此操作(在撰写本文时作为候选发布版可用,但尚未准备好生产)。

从 MySQL 5.6.5 开始,TIMESTAMP 和 DATETIME 列可以自动初始化并更新为当前日期和时间(即当前时间戳)。在 5.6.5 之前,这仅适用于 TIMESTAMP,并且对于每个表最多一个 TIMESTAMP 列......对于表中的任何 TIMESTAMP 或 DATETIME 列,您可以将当前时间戳分配为默认值,自动更新价值,或两者兼而有之

于 2012-11-22T19:06:19.220 回答
0

您可以编写一个触发器来created分别在插入时添加时间戳

delimiter |
CREATE TRIGGER add_created_ts BEFORE INSERT on `tmp`
FOR EACH ROW
BEGIN
   SET NEW.created = current_timestamp;
END
|
delimiter ;
于 2012-11-22T18:57:42.377 回答