由于它可能导致的问题,这种情况发生的可能性对我来说似乎极不可能,但我想我还是会问这个问题......
想象一个涉及自动增量 ID 并分配值的事务。在 COMMIT 之前,涉及的代码会缓存分配的 ID 的副本以供以后参考。然后提交事务。
假设没有直接的客户干预(删除或更改记录),是否有任何数据库或情况会在提交后立即自动更改 ID 值,从而使缓存的 ID 不正确?在事务中缓存 ID 总是安全的吗?
我可以想象发生这种情况的一个假设情况是,如果某些 RDBMS 实现莫名其妙地决定有必要具有无间隙且与时间相关的自动增量值(因为我看到很多人想要这个的例子)。在这个假设的情况下,我可以想象可能会对 ID 进行一些神奇的洗牌,以填补由另一个事务(或其他间隙原因)中的后 ID 分配回滚引起的间隙。这将使缓存的值无效。
任何人都知道这样的实现,或其他缓存杀手?