数時間ごとに実行する必要があるデータベース集中型アプリケーションがあります。このアプリケーションが最後に実行されてから特定のテーブルが変更されたかどうかを検出する方法はありますか?
6 に答える
The most efficient way to detect changes is this.
CHECKSUM TABLE tableName
実行間のテーブルへの変更を検出する一般的な方法は、次のようなクエリを使用することです。
SELECT COUNT(*),MAX(t) FROM table;
ただし、これが機能するためには、テーブルについていくつかの仮定が成り立つ必要があります。
- 列の
t
デフォルト値は NOW() です - UPDATE で実行され、常に
t
列を NOW() に設定するトリガーがあります。
テーブルに通常の変更を加えると、上記のクエリの出力が変更されます。
場合によっては、この種のチェックが機能しない可能性のある競合状態がいくつかあります。
追跡したいテーブルにトリガーを設定して、挿入時にログテーブルに追加できますか? それが機能する場合は、実行ごとにログテーブルを読み取るだけで済みます。
タイムスタンプを使用します。必要に応じて、新しい行で更新するか、既存の行を変更するように設定できます。参照を参照するには、ここにアクセスしてください。
http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html
CHECKSUM TABLE tablename を使用しましたが、それは素晴らしいものです。
テーブルの更新を確認するために AJAX リクエストから呼び出しています。変更が見つかった場合は、画面の更新が実行されます。
データベース "myMVC" とテーブル "detail" の場合、フィールド "table" と "Checksum" がそれぞれ "mymvc.detail" と "521719307" に設定された 1 つの行を返します。