0

假设我有一个表,第一列是一个标识。我认为价值是由一个自动创造的。假设我有这个专栏

1 
2
3
4
...
47
48
49
50

如果我删除最后一行(id = 50)并插入一个新行,为什么标识是 51 而不是 50?

谢谢。

4

4 回答 4

1

无论该行是否存在,该值都会用完。除了删除之外,您还会在回滚插入时看到间隙。如果你想要一个连续的整数序列,身份不是答案。

于 2012-06-29T17:37:31.690 回答
0

身份种子不受删除的影响,因此下一个值将继续增加,就好像该行从未被删除一样。

也可以使用DBCC CHECKIDENT(http://msdn.microsoft.com/en-us/library/ms176057.aspx) 实用程序重新植入身份。

于 2012-06-29T17:35:11.877 回答
0

种子与记录分开跟踪;如果您删除记录,该值仍会被使用。您可以使用

DBCC CHECKIDENT (YourTable, NORESEED)

验证下一个身份值将是什么。

于 2012-06-29T17:37:52.410 回答
0

尝试调整差距是一个非常糟糕的主意。如果您没有正确执行此操作,您很可能会遇到数据完整性问题。没有理由担心 99.99% 的应用程序中存在差距(有一些应用程序具有不允许差距的法律要求 - 那些不使用身份的应用程序)。

于 2012-06-29T20:13:57.373 回答