如何仅检索自SQL中上次查询以来的更新/新记录?

如何仅检索自SQL中上次查询以来的更新/新记录?,sql,mysql,tsql,query-cache,Sql,Mysql,Tsql,Query Cache,我被要求设计一个用于缓存SQL查询结果的类。调用类的查询方法将在第一时间查询并缓存整个结果集;之后,每个子序列查询将只检索更新的部分,并将结果合并到缓存中。如果类被要求是泛型的,即不了解数据库和表,你知道吗?是否可能,以及如何仅检索自上次查询以来的更新/新记录 谢谢! WilliamMySQL(据我所知,也不是任何其他基于SQL的数据库)不会将行的“上次更新时间”或“插入时间”存储在任何位置,至少不会存储在您可以查询的任何位置(解析二进制日志可能不是您想要做的事情) 要获得“新记录”,您需要

我被要求设计一个用于缓存SQL查询结果的类。调用类的查询方法将在第一时间查询并缓存整个结果集;之后,每个子序列查询将只检索更新的部分,并将结果合并到缓存中。如果类被要求是泛型的,即不了解数据库和表,你知道吗?是否可能,以及如何仅检索自上次查询以来的更新/新记录

谢谢! William

MySQL(据我所知,也不是任何其他基于SQL的数据库)不会将行的“上次更新时间”或“插入时间”存储在任何位置,至少不会存储在您可以查询的任何位置(解析二进制日志可能不是您想要做的事情)

要获得“新记录”,您需要

  • 查询自动增量值高于上一个已知最大值的所有记录
  • 将datetime/时间戳添加到将存储记录的插入/更新时间的表中,并基于该表进行查询
<>您可以考虑让代码创建自己的表,每次更新或插入发生在另一个表上时,都会存储一个记录,然后将触发器添加到填充表的所有其他表中。


但这可能有点过分。

要么必须通知您的缓存类所有更新,要么您需要某种类型的过期

唯一的另一个选项是查询要检查的数据库,但这样会丢失缓存点:)


对于“通用”缓存,上述情况是正确的。如果您为一个特定的表实现一个专门的缓存,那么您可能能够利用DML模式。

使用中间表变量和“NOT IN”子句怎么样?我不明白您在问什么。您将如何使用这些东西来确定新的/更新的记录?您是否建议将一个表中的所有数据复制到一个临时表中,然后将原始表与“最后一个已知值”的副本进行连接?这将是一种非常低效的投票方式。您也可以开始散列行内容并将其存储在某个位置。PostgreSQL保留记录有效的事务id范围--有关详细信息,请参阅。啊,在PostgreSQL数据库中,您可以记住行的最后一个已知事务id,然后检查它是否已更改。漂亮!不过,我不知道这是否会对他神奇的广义类有所帮助。逻辑是:将结果附加到内存中当前不存在的表中