2

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

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

进程 B 想知道 T 中的 L 行最后一次修改的时间(System.currentTimeMillis()例如,B 提供了一个值)。

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

4

2 回答 2

2

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

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

ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP

另外请区分数据库服务器时钟、进程A时钟和进程B时钟。在现实世界中,它们很可能不会相同。

于 2011-05-26T19:07:02.953 回答
1

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

因此,您必须设置表来存储修改时间,一种非常简单的方法是创建一个值为 的“计算列”,now()每次修改记录时都会计算一个计算列。

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

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

于 2014-02-25T20:17:01.127 回答