是否可以隐式获取表列的最后更新时间戳?

Posted

技术标签:

【中文标题】是否可以隐式获取表列的最后更新时间戳?【英文标题】:Is it possible to get a last-update timestamp for a table column IMPLICITLY? 【发布时间】:2016-05-26 20:40:27 【问题描述】:

我搜索了一下,没有找到答案。问题是对于现有的 SQL 表(假设 H2、mysql 或 Postgres 中的任何一个)...

有没有办法获取给定表行的最后更新时间戳值。也就是说,无需显式声明新列(更改表)和/或添加更新时间戳列的触发器。

我正在使用 JDBC 驱动程序、准备语句、获取 ResultSet 等。我需要能够确定数据最近是否发生了变化,为此时间戳会有所帮助。如果可能,我想避免在系统中的所有表中添加时间戳列。

【问题讨论】:

你能在表上创建触发器吗?如果是这样,您将能够通过让触发器将该信息保存在另一个表中来跟踪任何更新/插入。如果没有,您可以通过访问日志来找出答案(如果启用了该级别的详细信息) - 这需要更多的工作,但您可能能够从中获得所需的信息。 是的,我想知道是否有更标准的东西。走日志路线是非性能和特定于数据库的,因此会影响可移植性和可维护性。 【参考方案1】:

对于这个问题没有隐含的标准方法。标准方法是在数据库触发器或应用程序函数中有一个明确的列和逻辑...... 如前所述,有一些方法可以通过日志来完成,但这很难而且通常不会很准确。例如,在 Postgres 中,您可以在 postgresql.conf 中启用提交时间戳并检查上次更新时间,但这些是近似值,不会保留很长时间...

【讨论】:

这是评论,不是答案。您所写的所有内容都已在 cmets 中进行了讨论和确认,因此我不确定这会增加什么价值。

以上是关于是否可以隐式获取表列的最后更新时间戳?的主要内容,如果未能解决你的问题,请参考以下文章

错误地将小时数添加到 MySQL 表列时间戳 Laravel

如何将 C# DateTime 转换为 MySQL 时间戳表列

SQL Server RowVersion/时间戳 - 比较

时间戳(自动)何时更新?

是否可以在sql中获取行的最后更新时间

从红移表中获取上次更新时间戳