2011-05-26 11 views
1

はのはを見つける

プロセスAは、CRUD(作成、読み取り、更新、削除を実行し、私はH2データベーステーブルT上に2つのプロセスAとBを行う取引を持っている想像してみましょう)on 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

+1

'src/test/org/h2/samples'にいくつかのトリガーの例があります。 – trashgod

0

データベースには、セットアップするものだけが格納されます。

変更時刻を格納するテーブルを設定する必要があります。本当に簡単な方法は、値がnow()の「計算列」を作成することです。レコードが変更されるたびに計算列が評価されます。 FYI

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

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