2017-05-24 32 views
1

データベース内のテーブルの最終更新時刻(または最後に変更された時刻)を特定する必要があります(つまり、特定のテーブルのデータが更新、削除、または更新された最後の時刻)挿入されているかどうか)をチェックします。 MySQLの/ MariaDBマニュアルに従って、私は、データベース内のテーブルの最終更新時刻を取得するには、次のSQLステートメントを使用していますデータベース内のテーブルの最終更新時刻を取得する

SELECT update_time FROM information_schema.tables WHERE table_schema='my_db' and table_name='my_table'; -- For table named 'my_table' in database 'my_db'

ここで問題です:結果update_timeフィールドの値は常にあります指定されたテーブルに変更が加えられても、NULLが返されました。私が手動でinformation_schemaデータベース内のtablesテーブルを参照すると、my_dbmy_tableのエントリがtable_schematable_nameフィールドにそれぞれ存在しないことになり、アクティビティがログに記録されないことになります。誰かが私にこの問題を解決するのを手伝ってもらえますか?

編集: この質問は重複していません。最後の更新時間を取得する方法を尋ねるのではなく、information_schema.tablesのフィールドについても質問していますが、NULLです。

+0

私はこれらの値がサーバーの起動時にリセットされていることを確信しています。レコードが更新されたときに更新されるタイムスタンプを含むテーブル自体の列を使用することをお勧めします。 –

答えて

0

テーブルTABLESのINFORMATION_SCHEMAデータベースからクエリブラウザまたはCLIに問い合わせるだけで、現在のデータベースサイズを取得できます。

SELECT table_schema "Data Base Name", 
    sum(data_length + index_length)/1024/1024 "Data Base Size in MB" 
    FROM information_schema.TABLES 
    GROUP BY table_schema ; 

データベースを最新の状態に更新するには、時間を作成するよりも時間がかかることがあります。

SELECT MAX(UPDATE_TIME), MAX(CREATE_TIME), TABLE_SCHEMA 
FROM `TABLES` 
GROUP BY TABLE_SCHEMA 
ORDER BY 1, 2; 
+0

'データベース内のテーブルの最終更新時刻(または最後に変更された時刻)を調べる必要があります。 –

+0

私は自分の答えを更新しています。 –

1

テーブルに値GETDATE()とともに既定値のUpdatedDateまたはModifiedDateの日付列が含まれている場合。彼はそれを利用するべきです。 クローズ・ビューでは、行が挿入されたときに履歴を保持する必要はありません。しかし、唯一の前提条件は、テーブルがいつ更新されたかを知ることです。それでおしまい! 最後のテーブルがいつ更新されたかを知りたい場合、動的管理ビュー(dmv) - sys.dm_db_index_usage_statsを照会して、最後に更新されたテーブルがいつあったかを簡単に調べることができます。テーブルを作成して更新することで、この例を理解してみましょう。 dmvを使用して、最後に更新された時期を判断できます。

SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, last_user_update,* 
FROM sys.dm_db_index_usage_stats 
WHERE database_id = DB_ID('AdventureWorks') 
AND OBJECT_ID=OBJECT_ID('test') 
関連する問題