Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MySQL表中创建两个自动设置的时间戳列?_Mysql - Fatal编程技术网

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

如何在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

我希望我的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列具有当前的_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
,但就我们所使用的
时间戳而言,似乎最好还是保留它,以避免复杂化)。