我希望我的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
是否有已知的解决方法?
答案 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()