假设我有两个进程 A 和 B 在 H2 数据库表 T 上执行事务。
进程 A 在 T 上执行 CRUD(创建、读取、更新、删除)。
进程 B 想知道 T 中的 L 行最后一次修改的时间(System.currentTimeMillis()
例如,B 提供了一个值)。
可以在 T 中创建一列,记录每一行的最后修改时刻,但我想知道 H2 是否已经在某处保存了此信息以及是否可以访问它。
假设我有两个进程 A 和 B 在 H2 数据库表 T 上执行事务。
进程 A 在 T 上执行 CRUD(创建、读取、更新、删除)。
进程 B 想知道 T 中的 L 行最后一次修改的时间(System.currentTimeMillis()
例如,B 提供了一个值)。
可以在 T 中创建一列,记录每一行的最后修改时刻,但我想知道 H2 是否已经在某处保存了此信息以及是否可以访问它。
据我所知,H2 中没有这样的功能(并且可能在任何 RDBMS 中都没有)。原因很简单——每条记录额外增加 4 或 8 个字节可能会对整个数据库大小产生巨大影响,尤其是对于小记录。也会有轻微的性能影响。
但是通过使用额外的列和更新触发器来实现此功能相对简单。还有一些数据库可能会进一步简化它,比如 MySQL:
ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP
另外请区分数据库服务器时钟、进程A时钟和进程B时钟。在现实世界中,它们很可能不会相同。
数据库仅存储您设置的内容。
因此,您必须设置表来存储修改时间,一种非常简单的方法是创建一个值为 的“计算列”,now()
每次修改记录时都会计算一个计算列。
CREATE TABLE TEST(ID INT, NAME VARCHAR, LAST_MOD TIMESTAMP AS NOW());
仅供参考:http ://www.h2database.com/html/features.html#computed_columns