我最近不得不将一个数据库(sql server 2008)移动到另一台服务器上,我注意到在其中一个表中,标识列的值已经开始得到一些意想不到的值。其设置为标识列,标识增量为 1,标识种子为 1。在每 10 个连续条目左右之后,它将从另一个更高的数字开始,并在接下来的 10 个左右的条目中递增 1,然后跳到另一个更高的数字。我似乎无法弄清楚这个问题。
对不起外行语言。我不是数据库人。
我最近不得不将一个数据库(sql server 2008)移动到另一台服务器上,我注意到在其中一个表中,标识列的值已经开始得到一些意想不到的值。其设置为标识列,标识增量为 1,标识种子为 1。在每 10 个连续条目左右之后,它将从另一个更高的数字开始,并在接下来的 10 个左右的条目中递增 1,然后跳到另一个更高的数字。我似乎无法弄清楚这个问题。
对不起外行语言。我不是数据库人。
这可能不是您的身份密钥的问题,而是用于插入数据的框架或 SP 的问题。如果您有一个插入数据但随后被回滚的存储过程,则 ID 被保留但该行被“删除”。
所以要检查两个地方:一个是您正在使用的框架(NHibernate,还是实体框架等?)......这些框架可能会插入行然后删除它们。第二个要检查的地方是 SPROC 中的 INSERT 语句以及您可能期望 ROLLBACK 的其他地方。
另一个问题是您可能只是在检查数据而不对其进行排序?并且当您移植数据时,您认为它会始终按 ID 顺序插入或检索。但是因为新表没有以相同的方式“索引”,所以您不一定会按主键顺序查看项目。如果行在大多数情况下出现连续的间隙,则这种情况不太可能发生,但值得一提。
以下内容将对您的问题有所了解。
delete from mytable where id=10
1,2,3,4,5,6,7,8,9,**11**