gpt4 book ai didi

sql-server - SQL Server 是否保证标识列的顺序插入?

转载 作者:行者123 更新时间:2023-12-02 07:45:40 24 4
gpt4 key购买 nike

换句话说,以下“光标”方法是否保证有效:

  1. 从数据库检索行
  2. 保存返回记录中最大的ID以备后用,例如在LastMax
  3. 稍后,“SELECT * FROM MyTable WHERE Id > {0}”,LastMax

为了使其发挥作用,我必须确保在步骤 1 中未获得的每一行的 Id 都大于 LastMax。这是有保证的吗?还是我会遇到奇怪的竞争条件?

最佳答案

保证在任何情况下绝对不可能得到小于或等于当前最大值的值?不,没有这样的保证。也就是说,发生这种情况的情况是有限的:

  1. 有人禁用身份插入并插入一个值。
  2. 有人重新植入身份列。
  3. 有人更改了增量值的符号(即从 +1 改为 -1)

假设没有这些情况,您就可以避免竞争条件造成下一个值低于现有值的情况。也就是说,不能保证行将按照其标识值的顺序提交。例如:

  1. 打开一个事务,将一个标识列插入到您的表中。假设它的值为 42。
  2. 在同一个表中插入并提交另一个值。假设它的值为 43。

在提交第一个事务之前,43 存在,但 42 不存在。身份列只是保留一个值,它并不规定提交的顺序。

关于sql-server - SQL Server 是否保证标识列的顺序插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2828936/

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