找出何时在H2数据库表中修改了一行

时间:2011-05-26 18:39:11

标签: java database line h2 last-modified

假设我有两个进程A和B在H2数据库表T上执行事务。

进程A在T上执行CRUD(创建,读取,更新,删除)。

进程B想要知道T中的行L何时被最后修改(例如,B提供System.currentTimeMillis()值。)

可以在T中创建一个列,记录每行的最后修改时刻,但我想知道H2是否已经在某处保存了这些信息以及是否可以访问它。

2 个答案:

答案 0 :(得分:2)

据我所知,H2中没有这样的功能(可能在任何RDBMS中都没有)。原因很简单 - 每条记录额外的4或8个字节可能会对整体数据库大小产生巨大影响,尤其是对于小记录。此外还会对性能产生轻微影响。

但是通过使用额外的列和更新触发器来实现此功能相对简单。还有一些数据库可能会进一步简化它,比如MySQL:

ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP

另外请区分数据库服务器时钟,进程A时钟和进程B时钟。在现实世界中,他们很可能不会是一样的。

答案 1 :(得分:0)

数据库仅存储您设置的内容。

所以你必须设置表来存储修改时间,一个非常简单的方法是创建一个值为now()的“计算列”,计算列每次都被评估为evalueated记录被修改。

CREATE TABLE TEST(ID INT, NAME VARCHAR, LAST_MOD TIMESTAMP AS NOW());

仅供参考:http://www.h2database.com/html/features.html#computed_columns