我正在尝试创建一个包含两个时间戳列的表,一个用于创建行时,另一个用于更新行时。这是我到目前为止所尝试的:
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子句中只能有一个TIMESTAMP列和CURRENT_TIMESTAMP
答案 0 :(得分:1)
这是一个MYSQL约束,你只能有一个列的默认值是systime。
这个问题也可以参考 How to add "ON update current timestamp" to existing table column
答案 1 :(得分:1)
您可以在MySQL 5.6中执行此操作(在编写release candidate时可用,但尚未准备好生产)。
从MySQL 5.6.5开始,TIMESTAMP和DATETIME列可以自动初始化并更新为当前日期和时间(即当前时间戳)。在5.6.5之前,这仅适用于TIMESTAMP,每个表最多只有一个TIMESTAMP列....对于表中的任何TIMESTAMP或DATETIME列,您可以将当前时间戳指定为默认值,即自动更新价值,或两者兼有
答案 2 :(得分:0)
您可以编写一个触发器,单独在插入上添加created
时间戳
delimiter |
CREATE TRIGGER add_created_ts BEFORE INSERT on `tmp`
FOR EACH ROW
BEGIN
SET NEW.created = current_timestamp;
END
|
delimiter ;