2016-04-25 88 views
1

在MySQL中创建数据库表。我创建了两个字段来获取时间戳。sql中的数据库时间戳

created_at   timestamp default '0000-00-00 00:00:00', 
updated_at   timestamp default now() on update now(), 

当我更新数据库时,两个字段都更新为当前时间戳。有关如何防止这种情况发生的任何想法?我在更新时不提供'created_at'字段 - 我还为updated_at字段提供'null'来自动更新。

+0

我无法复制它。什么版本的MySQL? – Barmar

+0

我相信mysql v5.6.4 - 试图确认。 –

+0

查看https://dev.mysql.com/doc/refman/5.6/en/upgrading-from-previous-series.html – Barmar

回答

0

取决于MySQL版本,你应该能够使用默认值以下的的updated_at领域:在UPDATE CURRENT_TIMESTAMP

你created_at领域

CURRENT_TIMESTAMP应该只是CURRENT_TIMESTAMP为默认值。

我也将设置为数据类型日期时间而不是时间戳。

+0

中有关时间戳的部分他不希望它默认为当前时间,他希望它的默认时间为0. – Barmar

+1

@Barmar - 我看到他的当前声明没有created_at的日期时间值,但这是毫无价值的。他需要在创建时将其默认为当前日期时间值。另一个选项是将数据类型更改为datetime,默认值为NULL。 –

+0

@ReubenBrown上面的代码是我在尝试使其工作时发现的。我不能有两个current_timestamp(或now())声明而不会出现错误。我真的很喜欢这是一个自动的事情 - 不希望在创建时提供当前时间戳。 –

0

时间戳初始化可以是一个丑陋的野兽在MySQL!

基于下面你的commment有mysql v5.6.4或更早版本:

我不能宣布没有得到一个错误二current_timestamps - 尽管它的默认值是0 - 它是生产在创建当前时间戳(没有我在时间戳喂养) - 斯宾塞罗汉

你可以有被初始化和/或更新,当您插入/更新记录当前时间戳一个时间戳字段。在早期版本中,这必须是表中的第一个时间戳字段。

我想简单地设置created_at为与空的默认值的空的列,因为根据上timestamp initialization MySQL文档:

换句话说,定义为允许NULL值自动初始化TIMESTAMP列仅当其定义包含DEFAULT CURRENT_TIMESTAMP时

通过将默认值更改为空值,可以避免任何可能出现的问题,您可能会使用零日期和各种sql模式。

created_at   timestamp null default null, 
+0

我不能有两个current_timestamps声明没有得到一个错误 - 虽然它的默认值是0 - 它创建时产生一个当前时间戳(没有我喂给时间戳) –

+1

“我不能有两个current_timestamps声明没有得到一个错误“ - 所以你使用的是MySQL v5.6.4或更早版本。我会相应地更新我的答案。尽管我对围绕着可空性的回答的观点依然存在。 – Shadow

+0

您的解决方案将值为NULL –