2011-05-26 76 views
1

让我们想象一下我有一个H2数据库表T.两个进程A和B进行交易找出当行已经在H2数据库表被修改

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

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

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

回答

2

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

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

ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP 

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

+0

我想为我的下一步是找出这是否可以实现自动化。谢谢。 – JVerstry 2011-05-26 19:30:30

+1

'src/test/org/h2/samples'中有一些触发器示例。 – trashgod 2011-05-26 19:46:40

0

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

因此,您必须设置表以存储修改时间,并且一个非常简单的方法是通过创建值为now()的“计算列”,计算列在每次记录被修改时被评估。

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

FYI:http://www.h2database.com/html/features.html#computed_columns