gpt4 book ai didi

sql-server - sql回滚时如何重置自增Id

转载 作者:行者123 更新时间:2023-12-02 22:13:15 26 4
gpt4 key购买 nike

当我尝试在表中插入新行时,如果此事务中发生任何异常,则数据将回滚。

现在,当下次成功插入新条目时,自动增量 id 将更新为下一个值。表示表中两个连续的唯一 ID 之间存在间隙。

有什么有效的方法可以解决这个问题吗?

提前致谢

最佳答案

必须说答案 -

IDENTITY 列的整体思想是没有有意义,并且与事务无关 - 这样就可以输出数字,而无需关心其他事务是否回滚。想象一下,一个每秒 1000 次插入的系统,每个事务(插入)都会等待 10 毫秒来决定是否提交! (仅供引用 10 毫秒 * 100 = 1 秒)

注意:在 SQL Server 2012(撰写本文时的最新 SP/补丁级别)中,这里提到了一个“功能”on Connect与身份相关。

此外,即使在 2012 年之前,您甚至不需要回滚即可使用 IDENTITY 值 - 请参阅此处 https://stackoverflow.com/a/16156419/573261

<小时/>

出于同样的原因,这也适用于其他主要 RDBMS,例如

PostgreSQL sequences

Important: To avoid blocking concurrent transactions that obtain numbers from the same sequence, a nextval operation is never rolled back; that is, once a value has been fetched it is considered used, even if the transaction that did the nextval later aborts. This means that aborted transactions might leave unused "holes" in the sequence of assigned values.

(强调我的)

关于sql-server - sql回滚时如何重置自增Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16358966/

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