2012-03-02 8 views
3

私はmysql 5.1.41-3ubuntu12.10を使用していて、いつ私のテーブルが最後に変更されたか(または変更されていない場合はCREATEd)を知りたいと思います。テーブルが最後に変更されたのはいつですか?

SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA = SCHEMA(); は、CREATEと最後のUPDATE時間を与えますが、最後のALTER時間はAFAICTではありません。

答えて

6

答えはストレージエンジンによって多少異なります。テーブルが最後に変更された時の最も信頼できる指標は、データディレクトリ内の.frmファイルの変更時刻を調べることです。そのファイルは、テーブルの再構築を必要としない列のデフォルトの更新などの変更についても、テーブルを変更するたびに更新される必要があります。

information_schema.tables.create_timeは、テーブルを変更したときにその値が実際にほとんど変更されるため、誤った名前になります。ただし、これはストレージエンジンが関連する1つの領域です。 InnoDBで再構築なしで(カラムのデフォルト値を変更するなど)変更を行うとinformation_schema.tables.create_timeが更新されますが、MyISAMで同じ操作を行うとinformation_schema.tables.create_timeは更新されません。どちらの場合も、.frmファイルは更新する必要があります。そのため、最も正確なデータにアクセスできる場合は、そのファイルのタイムスタンプをチェックすることをお勧めします。

+0

+1、ありがとうございます。 – msh210

+0

+1この重要な違いを引き起こします。 InnoDBを使用しているので、テーブルが変更されたときに 'information_schema.tables.create_time'が更新されると思います。 '.ibd'や' .opt'ファイルのCreate時間をファイルシステムで調べる以外に、私はテーブルの真のCreate_Timeを見つけることができません。それはバグとはみなされないようですね。 – philtune

+0

私のデータベーステーブルを掘り下げて、mysql.innodb_table_stats.last_updateが見つかりました。最後のUPDATEではなくCREATEの時間が表示されているようです。特に 'information_schema.tables.create_time'がCREATE時間の代わりに最後のUPDATEを示すように見えるので、非常にばかげています。うーん。 – philtune

関連する問題