gpt4 book ai didi

sql - 自动增量 ID 是否可以在提交时从中间事务值更改?

转载 作者:行者123 更新时间:2023-12-01 23:26:03 26 4
gpt4 key购买 nike

这种情况发生的可能性对我来说似乎极不可能,因为它可能会导致问题,但我想我还是会问这个问题......

想象一个涉及自动增量 ID 并分配值的事务。在 COMMIT 之前,涉及的代码会缓存分配的 ID 的副本以供以后引用。然后提交事务。

假设没有直接的客户端干预(删除或更改记录),是否有任何数据库或情况会在 COMMIT 时立即自动更改 ID 值,从而使缓存的 ID 不正确?在交易中缓存 ID 总是安全的吗?

我可以想象发生这种情况的一个假设情况是,如果某些 RDBMS 实现莫名其妙地决定有必要具有无缝和时间相关的自动增量值(因为我看到很多人想要这个的例子)。在这个假设的情况下,我可以想象可能会对 ID 进行一些神奇的改组,以填补由另一个事务中的 ID 分配后回滚(或其他导致差距的原因)造成的差距。这会使缓存的值无效。

有人知道这样的实现或其他缓存 killer 吗?

最佳答案

生成的 id 值的实现通常涉及在一个简短的原子操作中增加一个计数器值。然后这个值被请求事务使用,即使该事务回滚,保留值也永远不会返回到自由值池中。所以从这个角度来看,我认为所描述的情况不太可能。此外,在 pl/sql 类型的程序中,您确实需要生成正确的值才能将其他相关行插入子表。

对于那些想要按时间排序的无间隙 id 值的人:自动增量/代理键的唯一目的是为行创建一个人工标识。它应该与确定行的创建顺序无关。有更好的方法可以做到这一点,例如使用创建时间戳。

关于sql - 自动增量 ID 是否可以在提交时从中间事务值更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4682242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com