![]() |
1
17
绝对保证在任何情况下,你都不可能得到一个可能小于或等于当前最大值的值?不,没有这样的保证。也就是说,这种情况可能发生的情况是有限的:
假设没有这些情况,您就可以安全地避开竞争条件,从而创建下一个值低于现有值的情况。也就是说,不能保证 坚信的 按照他们的身份价值的顺序。例如:
在提交第一个事务之前,43个事务存在,42个事务不存在。Identity列只是保留一个值,而不是指定提交的顺序。 |
![]() |
2
4
我认为这可能会出错,这取决于交易的持续时间 考虑以下事件序列:
您的代码将永远找不到事务A插入的行。执行步骤6时尚未提交。当执行下一个查询时,将找不到它,因为标识列中的值比查询要查找的值低。 如果使用 read-uncommitted 隔离模式 |
![]() |
3
2
标识将始终遵循定义标识的增量: 标识[(种子,增量)] http://msdn.microsoft.com/en-us/library/aa933196(SQL.80).aspx 可以是正的也可以是负的(可以向前或向后递增)。如果将标识设置为向前递增,则标识值将始终大于前一个值,但如果回滚插入,则可能会丢失一些值。 是的,如果将标识增量设置为正值,则循环逻辑将工作。 |
![]() |
4
1
唯一可能无法插入的时间记录是,如果有人打开标识插入并手动将记录插入跳过的ID(或在某些情况下插入负数)。这是一种相当罕见的情况,通常只能由系统管理员完成。例如,可以重新插入意外删除的记录。 |
![]() |
5
0
SQL Server唯一保证的是,您的标识列将始终递增。 但是需要考虑的事情是:
这就解释了为什么SQL Server不保证顺序缩进。 有一种方法可以使用 DBCC 命令。但在此之前,请考虑以下事项:
标识列是dbrms中不可更改的最重要元素之一。
这里有一个链接可以帮助您:
Understanding IDENTITY columns
|
![]() |
Duvan · 将逗号(,)替换为点(.)[副本] 2 年前 |
![]() |
Mateen Bagheri · 选择表的计数并选择其自身 2 年前 |
![]() |
SoT · SQL Server中求和函数的工作方式 2 年前 |
![]() |
NKAT · 将列值聚合到列表中会产生错误 2 年前 |
![]() |
deanpillow · 返回两列中有一个匹配值的记录 2 年前 |
![]() |
snowflakes74 · 在Dapper中异步查询多个结果 2 年前 |