假设我有下表名为“联系人”:
id|name|age
1|John|5
2|Amy|2
3|Eric|6
是否有一些简单的方法可以检查该表是否会像 sha/md5 哈希在获取计算机上文件的校验和时的工作方式一样发生变化?
因此,例如,如果向该表添加了新行,或者如果表中的值发生了更改,“散列”或某些生成的值表明该表已更改。
如果没有直接的机制,那么最好的方法是什么(可能是一些任意散列机制,只要该方法强调性能和最小化延迟)?它可以应用于多个表吗?
假设我有下表名为“联系人”:
id|name|age
1|John|5
2|Amy|2
3|Eric|6
是否有一些简单的方法可以检查该表是否会像 sha/md5 哈希在获取计算机上文件的校验和时的工作方式一样发生变化?
因此,例如,如果向该表添加了新行,或者如果表中的值发生了更改,“散列”或某些生成的值表明该表已更改。
如果没有直接的机制,那么最好的方法是什么(可能是一些任意散列机制,只要该方法强调性能和最小化延迟)?它可以应用于多个表吗?
没有直接的机制可以通过 SQL 获取该信息。
您可以考虑为每一行添加一个额外的 LastModified 列。要知道上次修改表的时间,请选择该列的最大值。
您可以通过在表上使用 INSERT、UPDATE 和 DELETE触发器来获得类似的结果,该触发器使用最后修改的时间戳更新单独的表。
如果您想知道某件事是否发生了变化,则需要进行比较。例如日期。您可以添加一个包含两列的表,即表名和时间戳,并为您有兴趣控制的表上的事件编写一个触发器,因此此触发器将更新此控制表的时间戳列。
如果表不是太大,您可以复制整个表。当您想要检查更改时,您可以查询旧数据与新数据。
drop table backup_table_name;
CREATE TABLE backup_table_name LIKE table_name;
INSERT INTO backup_table_name SELECT * FROM `table_name`;