【发布时间】:2021-12-22 02:16:59
【问题描述】:
我正在尝试检测表是否在过去 5 分钟内更新,如果是,则制作一份副本。我可以为这两个部分创建查询,但是我正在努力寻找一种合适的方式来组合它们。
第 1 部分 - 检测更新:
SELECT *
FROM `INFORMATION_SCHEMA`.`TABLES`
WHERE
DATE_SUB(NOW(), INTERVAL 5 HOUR_MINUTE) < `UPDATE_TIME`
AND TABLE_NAME = 'admin'
第 2 部分 - 制作副本:
CREATE TABLE admin_copy LIKE admin
INSERT admin_copy
SELECT * FROM admin
我们将不胜感激。
【问题讨论】:
-
该查询将如何检测更新?如果您正在考虑使用
UPDATE_TIME,则该列不会在每次修改表时更新 -
来自手册 Update_time 上次更新数据文件的时间。对于某些存储引擎,此值为 NULL。例如,InnoDB 在其系统表空间中存储多个表,数据文件时间戳不适用。即使对于每个 InnoDB 表在单独的 .ibd 文件中的 file-per-table 模式,更改缓冲也会延迟对数据文件的写入,因此文件修改时间与上次插入、更新或删除的时间不同。对于 MyISAM,使用数据文件时间戳;但是,在 Windows 上,时间戳不会被更新更新,因此该值不准确。
-
获取innodb表更新时间检查:stackoverflow.com/questions/2785429/…
-
有趣。尽管表的存储引擎是 InnoDB,但我在测试时成功地使用了 update_time(或者我认为是这样)。