查询查找过去一小时内修改的表

age*_*eto 32 mysql database

我想找出MySQL数据库中过去一小时内修改过的表.我怎样才能做到这一点?

rjh*_*rjh 59

MySQL 5.x可以通过INFORMATION_SCHEMA数据库完成此操作.此数据库包含有关表,视图,列等的信息.

SELECT * 
FROM `INFORMATION_SCHEMA`.`TABLES`
WHERE 
    DATE_SUB(NOW(), INTERVAL 1 HOUR) < `UPDATE_TIME`
Run Code Online (Sandbox Code Playgroud)

返回过去一小时内已更新的所有表(UPDATE_TIME).您还可以按数据库名称(TABLE_SCHEMA列)进行筛选.

一个示例查询:

SELECT 
    CONCAT(`TABLE_SCHEMA`, '.', `TABLE_NAME`) AS `Table`, 
    UPDATE_TIME AS `Updated`
FROM `INFORMATION_SCHEMA`.`TABLES`
WHERE
    DATE_SUB(NOW(), INTERVAL 3 DAY) < `UPDATE_TIME`
    AND `TABLE_SCHEMA` != 'INFORMATION_SCHEMA'
    AND `TABLE_TYPE` = 'BASE TABLE';
Run Code Online (Sandbox Code Playgroud)

  • 请注意,此方法仅适用于MyISAM表,而不适用于InnoDB. (25认同)
  • 对于 mysql 5.7.15,该请求适用于 InnoDB 表。 (2认同)

Dav*_* V. 5

对于要检测更改的每个表,您需要一个包含最后一个更改的时间戳的列.

对于表中的每个插入或更新,您需要使用当前日期和时间更新该列.

或者,您可以设置一个触发器,在每次插入或自动修改时自动更新列.这样您就不必修改所有查询.

一旦这样做,要查明表中的行是否在过去一小时内被修改,请执行查询

select count(*) from mytable where datemod>subtime(now(),'1:0:0')
Run Code Online (Sandbox Code Playgroud)

对要检查的每个表重复此操作.