了解回滚期间 SQL Server 标识列行为
SQL Server 的自动递增标识列呈现出一个独特的特征:即使在事务回滚之后它们也会继续递增。这可能会导致身份序列中出现间隙,这是特定应用中的潜在问题。
当事务中的 INSERT
语句失败并且事务回滚时,插入的行将被删除。 但是,回滚之前分配的标识值保持不变。这会导致未使用的身份值,从而产生间隙,或者如果您尝试重新使用这些值,则可能会导致问题。
身份列的这种非交易性质是有意为之的。 在多用户环境中,使身份分配事务化会带来显着的性能开销和瓶颈,因为它需要锁定机制来防止并发访问和分配相同的身份值。
因此,在回滚后恢复“丢失”的身份值是不可能的。
为了缩小身份差距,请考虑生成唯一标识符的替代方法,包括:
以上是为什么 SQL Server 标识列在事务回滚后仍会增加?的详细内容。更多信息请关注PHP中文网其他相关文章!