如何在MySQL表中创建2个自动设置的时间戳列?

时间:2014-09-22 18:06:43

标签: mysql

我希望我的MySQL表包含2个时间戳列,两者都自动设置,没有客户端帮助:一个在插入时初始化一次:

`added` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

和另一个在插入时初始化相同并在每次更新时更新:

`updated` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

但这不会这样:

  

[Err] 1293 - 表定义不正确;在DEFAULT或ON UPDATE子句中只能有一个TIMESTAMP列和CURRENT_TIMESTAMP

是否有已知的解决方法?

2 个答案:

答案 0 :(得分:3)

不仅有一种解决方法,还有一个解决方案:升级到MySQL 5.6.5或更高版本,这是支持的。

请参阅:MySQL 5.6.6 TIMESTAMP columns and DEFAULT values

{edit}由于升级不是一个选项,您可以将第一列设为普通时间戳列,并创建一个触发器,在插入记录时设置一个时间戳。然后,您可以使用DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP创建另一个列,以便在插入和更新时获得时间戳。

CREATE TRIGGER task_creation_timestamp BEFORE INSERT ON tasks 
FOR EACH ROW
SET NEW.created = NOW();

我从this answer偷了这个触发器。

答案 1 :(得分:1)

没有"解决方案"如错误所示,每个表只能有一个TIMESTAMP(在以前版本的5.6.6中为GolezTrol Suggested

要解决此问题,我建议您制作"时间戳" datetime并将默认设置设为NOW()CURRENT_TIMESTAMP()any other synonym for NOW()