1

我有基于 InnoDB 的表,我可以使用这些表进行校验和:

checksum table _table_name_

如果数百万条记录驻留在表中,这会很慢。我想知道是否有任何方法可以识别表格是否被更改?

我需要一些快速且廉价的请求,并且每次对表的任何记录进行更改时都会更改。我没有为 InnoDB 表找到任何东西。有什么事吗?

问候菲利克斯

4

2 回答 2

1

如果您LastUpdateTS在表上有一个时间戳(比如 ),使用默认设置创建,并且上面有一个索引,那么这应该相当快。它只会捕获插入和更新,但不会捕获删除:

SELECT MAX(LastUpdateTS)
FROM TableX

来自MySQL Docs, Timestamp Properties

在一个CREATE TABLE语句中,第一TIMESTAMP列可以用以下任何一种方式声明:

使用DEFAULT CURRENT_TIMESTAMPandON UPDATE CURRENT_TIMESTAMP子句时,该列的默认值具有当前时间戳,并且会自动更新。


如果您想捕获表中的任何更改(包括删除),触发器可能是最好的解决方案。每次INSERT, UPDATEorDELETE语句作用于表时,触发器可以更新辅助表。

于 2012-01-10T13:26:18.077 回答
0

更高版本的 MySQL 为表的每次更新存储一个时间戳:

SELECT UPDATE_TIME
FROM   information_schema.tables
WHERE  TABLE_SCHEMA = 'dbname'
   AND TABLE_NAME = 'tabname'
于 2012-01-10T12:47:00.497 回答