Я хочу узнать, какие таблицы были изменены в прошлый час в базе данных MySQL. Как я могу сделать это?
MySQL 5.x может сделать это через базу данных INFORMATION_SCHEMA. Эта база данных содержит информацию о таблицах, представлениях, столбцах и т. Д.
SELECT *
FROM `INFORMATION_SCHEMA`.`TABLES`
WHERE
DATE_SUB(NOW(), INTERVAL 1 HOUR) < `UPDATE_TIME`
Возвращает все таблицы, которые были обновлены (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';
Для каждой таблицы, в которой вы хотите обнаружить изменения, необходимо иметь столбец, содержащий временную метку последнего изменения.
При каждой вставке или обновлении таблицы необходимо обновлять этот столбец текущей датой и временем.
В качестве альтернативы можно настроить триггер, который автоматически обновляет столбец при каждой вставке или изменении. Таким образом, вам не придется изменять весь запрос.
Как только это сработает, чтобы узнать, были ли строки таблицы изменены за последний час, выполните запрос
select count(*) from mytable where datemod>subtime(now(),'1:0:0')
Повторите для каждой таблицы, которую вы хотите проверить.