更新应用程序或数据库中的时间戳列?

时间:2011-09-03 04:07:53

标签: php mysql timestamp

我在数据库中的每个表上都有date_created和date_modified列。

使用MySQL触发器在数据库中设置timestamp列与使用PHP在应用层设置它们有什么优点/缺点?

在多台服务器上部署时,哪种更易于维护并具有更好的时间同步?

编辑: 既然Johan建议在数据库中设置时间戳是好的,这些正确的实现是否正确? 另外,在每张桌子上都有date_created和date_modified是一种好习惯吗? 或者你建议在某些桌子上添加它们吗?

date_created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
date_modified TIMESTAMP NOT NULL DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP

3 个答案:

答案 0 :(得分:2)

数据库中的时间戳。

如果在主从设置中进行复制,则会正确复制数据库时间戳(使用原始时间戳)。

您没有(!)在触发器中设置时间戳。

相反,您在表定义中指定它们,MySQL将在插入和/或更新时自动设置正确的时间戳 当您创建(或更改)表时,您只需将它们设置一次即可。

再好不过了。

答案 1 :(得分:0)

您可以自行决定哪些表应该有时间戳列。在我们的生产环境中,每个表都有这些列。

但是,我们还在代码中设置了值。我相信这样做是为了使日期完全控制应用程序。知道无论你采用哪种方式,复制都会没问题。如果您确实在应用程序中设置了日期,并且您想要数据库服务器时间而不是应用程序服务器时间,只需使用MySQL的NOW()函数设置列。

答案 2 :(得分:0)

  

在每张桌子上使用date_created和date_modified是一种好习惯吗?

不确定。
我也会投入date_deleted。

  

更新应用程序或数据库中的时间戳列?

取决于您打算如何使用这些字段 如果它是某篇文章并且您想要显示上次编辑时间,则不应使用mysql时间戳功能,因为它最终会产生意外结果,例如数据库中所有记录中的更新时间相同。

触发器相同。
不要懒惰,手动设置此字段。由于你已经使用ORM来做它,它将不会花费你,不是吗?