はのはを見つける
プロセスAは、CRUD(作成、読み取り、更新、削除を実行し、私はH2データベーステーブルT上に2つのプロセスAとBを行う取引を持っている想像してみましょう)on T.
プロセスBは、Tの行Lがいつ最後に変更されたかを知りたいとします(たとえば、BはSystem.currentTimeMillis()
の値を提供します)。
各行の最後の変更時刻を登録するTに列を作成することもできますが、H2がすでにこの情報をどこかに保持していて、アクセス可能かどうかは疑問でした。
はのはを見つける
プロセスAは、CRUD(作成、読み取り、更新、削除を実行し、私はH2データベーステーブルT上に2つのプロセスAとBを行う取引を持っている想像してみましょう)on T.
プロセスBは、Tの行Lがいつ最後に変更されたかを知りたいとします(たとえば、BはSystem.currentTimeMillis()
の値を提供します)。
各行の最後の変更時刻を登録するTに列を作成することもできますが、H2がすでにこの情報をどこかに保持していて、アクセス可能かどうかは疑問でした。
私の知る限り、H2にはこのような機能はありません(おそらくRDBMSにはない)。理由は簡単です。レコードごとに余分な4または8バイトがデータベース全体のサイズに大きな影響を与える可能性があります(特に小さなレコードの場合)。また、わずかなパフォーマンスの影響もあります。
しかし、追加の列と更新トリガを使用することでこの機能を実装するのは比較的簡単です。また、いくつかのデータベースはMySQLのように、さらにそれを簡略化することがあります
ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP
をまた、データベース・サーバーのクロックを区別クロックとプロセスBのクロックを処理してください。現実世界では、彼らはおそらく同じではありません。
データベースには、セットアップするものだけが格納されます。
変更時刻を格納するテーブルを設定する必要があります。本当に簡単な方法は、値がnow()
の「計算列」を作成することです。レコードが変更されるたびに計算列が評価されます。 FYI
CREATE TABLE TEST(ID INT, NAME VARCHAR, LAST_MOD TIMESTAMP AS NOW());
:http://www.h2database.com/html/features.html#computed_columns
私は私のために次のステップは、これを自動化することができるかどうかを調べることであると思います。ありがとう。 – JVerstry
'src/test/org/h2/samples'にいくつかのトリガーの例があります。 – trashgod