3

information_schema とその動作について説明したいと思います。myisam テーブルがいつ変更されたかを知りたいとしましょう。私はこのクエリを書きます

select update_time from information_schema.tables
where table_schema = 'my_db' and table_name = 'my_table'

テーブルに何らかの変更を適用しても、 を実行するまで何も起こりませんflush tables。残念ながらupdate_time、テーブルの変更が実際に発生したときではなく、フラッシュテーブルを実行した瞬間の日付と時刻を保存しているように思えます。本当ですか?前もって感謝します。

4

1 に答える 1

2

個人的には、各テーブルに last_change タイムスタンプを追加し、それを「DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP」として定義することを好みます。これは、行が変更されるたびに mysql が自動的に更新することを意味します。

これにより、テーブルを直接クエリするだけで、テーブルがタッチされたことだけでなく、どの行がタッチされたかを知ることができます。

ただし、削除された行を検出することはできません。

于 2011-04-12T03:06:32.447 に答える