如何在MySQL表中创建两个自动设置的时间戳列?
我希望我的MySQL表包含2个时间戳列,这两个列都是在没有客户端帮助的情况下自动设置的:一个在插入时初始化一次:如何在MySQL表中创建两个自动设置的时间戳列?,mysql,Mysql,我希望我的MySQL表包含2个时间戳列,这两个列都是在没有客户端帮助的情况下自动设置的:一个在插入时初始化一次: `added` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 另一个在插入时初始化相同,并在每次更新时更新: `updated` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 但这不是这样的: [Err]1293-表定义不正确;在DEFA
`added` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
另一个在插入时初始化相同,并在每次更新时更新:
`updated` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
但这不是这样的:
[Err]1293-表定义不正确;在DEFAULT或ON UPDATE子句中,只有一个TIMESTAMP列具有当前的_TIMESTAMP
是否有已知的解决方案?不仅有解决方案,还有一个解决方案:升级到MySQL 5.6.5或更高版本,并且这是受支持的 见: {edit}由于升级不是一个选项,因此可以将第一列设为普通时间戳列,并创建一个触发器,在插入记录时设置一个时间戳。然后,您可以在更新当前时间戳时使用
默认当前时间戳创建另一列,这样它在插入和更新时都会获得时间戳
CREATE TRIGGER task_creation_timestamp BEFORE INSERT ON tasks
FOR EACH ROW
SET NEW.created = NOW();
我从中窃取了此触发器。没有错误提示的“解决方案”,每个表只能有一个时间戳(在5.6.6 as的早期版本上)
为了解决这个问题,我建议您将“时间戳”设置为datetime
,并将默认值设置为NOW()
或CURRENT\u TIMESTAMP()
或,谢谢,但不幸的是,在我的共享主机提供商自己意识到这一点之前,我没有机会说服他们更新任何内容。不管怎样,我还是支持你的答案。你也可以使用触发器。我刚刚在我的答案中添加了这个建议,但举个例子,您可以检查一下。相同的时间戳
数据类型似乎工作得很好,因此我看不出有任何理由在这里使用日期时间
(是的,我通常更喜欢DATETIME
,但就我们所使用的时间戳而言,似乎最好还是保留它,以避免复杂化)。