如何利用ROWID获取数据表中的新增记录?
用ROWID获取新增记录的可行性说明
- ROWID无法保证连续生成,不同数据库的ROWID机制虽有差异,但普遍存在断号或复用的情况:
- 删除记录后,新插入的数据可能复用被释放的旧ROWID
- 批量插入、事务回滚等操作也可能导致ROWID出现间隙
- 基于
ROWID > 上次存储的最大值的查询逻辑不可靠,会引发两类问题:- 漏查:新记录若复用了较小的旧ROWID,会因小于阈值被过滤
- 误查:若存在延迟提交的事务,后续出现的大ROWID可能被错误判定为新增数据
- 无时间戳字段时的替代方案:
- 给表添加自增主键字段(比如SQLite的
id INTEGER PRIMARY KEY AUTOINCREMENT),自增主键严格递增且不会复用,能可靠追踪新增记录 - 若无法修改表结构,可每次查询后记录所有已获取的ROWID,下次查询时排除,但这种方式在数据量大时性能极差,不建议使用
- 给表添加自增主键字段(比如SQLite的
内容的提问来源于stack exchange,提问作者AnR
相关产品推荐
相关产品推荐

