我有基于 InnoDB 的表,我可以使用这些表进行校验和:
checksum table _table_name_
如果数百万条记录驻留在表中,这会很慢。我想知道是否有任何方法可以识别表格是否被更改?
我需要一些快速且廉价的请求,并且每次对表的任何记录进行更改时都会更改。我没有为 InnoDB 表找到任何东西。有什么事吗?
问候菲利克斯
如果您LastUpdateTS
在表上有一个时间戳(比如 ),使用默认设置创建,并且上面有一个索引,那么这应该相当快。它只会捕获插入和更新,但不会捕获删除:
SELECT MAX(LastUpdateTS)
FROM TableX
来自MySQL Docs, Timestamp Properties
:
在一个
CREATE TABLE
语句中,第一TIMESTAMP
列可以用以下任何一种方式声明:使用
DEFAULT CURRENT_TIMESTAMP
andON UPDATE CURRENT_TIMESTAMP
子句时,该列的默认值具有当前时间戳,并且会自动更新。
如果您想捕获表中的任何更改(包括删除),触发器可能是最好的解决方案。每次INSERT
, UPDATE
orDELETE
语句作用于表时,触发器可以更新辅助表。
更高版本的 MySQL 为表的每次更新存储一个时间戳:
SELECT UPDATE_TIME
FROM information_schema.tables
WHERE TABLE_SCHEMA = 'dbname'
AND TABLE_NAME = 'tabname'