我需要找出数据库中表的最后更新时间(或上次更改时间)(即最后一次更新,删除或插入特定表中的数据)以确定是否需要备份或不。根据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
。更值得注意的是,当我手动浏览tables
数据库中的information_schema
表时,my_db
中没有my_table
和table_schema
的条目}和table_name
字段分别表示不记录活动。有人可以帮我解决这个问题并解释背后的原因吗?
编辑:
这个问题并不重复,因为问题还会询问information_schema.tables
NULL
的字段,而不仅仅是询问如何获取上次更新时间。
答案 0 :(得分:1)
如果表包含UpdatedDate或ModifiedDate日期列,则默认值为值GETDATE()。他应该利用它。 仔细观察时,在插入任何行时,不需要表格来保留历史记录。但是,唯一的先决条件是要知道何时更新任何表。而已! 如果用户想要找出最后一个表更新的时间,他可以查询动态管理视图(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')
答案 1 :(得分:0)
仅通过从表格表中的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;