假设我有一个表,第一列是一个标识。我认为价值是由一个自动创造的。假设我有这个专栏
1
2
3
4
...
47
48
49
50
如果我删除最后一行(id = 50)并插入一个新行,为什么标识是 51 而不是 50?
谢谢。
假设我有一个表,第一列是一个标识。我认为价值是由一个自动创造的。假设我有这个专栏
1
2
3
4
...
47
48
49
50
如果我删除最后一行(id = 50)并插入一个新行,为什么标识是 51 而不是 50?
谢谢。
无论该行是否存在,该值都会用完。除了删除之外,您还会在回滚插入时看到间隙。如果你想要一个连续的整数序列,身份不是答案。
身份种子不受删除的影响,因此下一个值将继续增加,就好像该行从未被删除一样。
也可以使用DBCC CHECKIDENT
(http://msdn.microsoft.com/en-us/library/ms176057.aspx) 实用程序重新植入身份。
种子与记录分开跟踪;如果您删除记录,该值仍会被使用。您可以使用
DBCC CHECKIDENT (YourTable, NORESEED)
验证下一个身份值将是什么。
尝试调整差距是一个非常糟糕的主意。如果您没有正确执行此操作,您很可能会遇到数据完整性问题。没有理由担心 99.99% 的应用程序中存在差距(有一些应用程序具有不允许差距的法律要求 - 那些不使用身份的应用程序)。