假设我有两个进程A和B在H2数据库表T上执行事务。
进程A在T上执行CRUD(创建,读取,更新,删除)。
进程B想要知道T中的行L何时被最后修改(例如,B提供System.currentTimeMillis()
值。)
可以在T中创建一个列,记录每行的最后修改时刻,但我想知道H2是否已经在某处保存了这些信息以及是否可以访问它。
答案 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