我正在使用数据库进行我插入的项目,并且我有一个自动增量。但是,随机地,自动增量ID开始计数错误。
例如,表中的最后一个ID为227.当我插入另一行时,它应自动将其指定为228,而是跳转到232.如何解决此问题?
答案 0 :(得分:5)
自动增量并不意味着使用表格中的下一个最高数字。
自动递增编号不连续的原因有几个。
然而,可能会有一些其他情况会导致这种情况。
要回答“我该如何解决这个问题?”的问题,请不要理会,ID应该是唯一的,没有别的,ID连续的通常没那么有用(除非你做分页假设它们是连续的,这是一个不好的假设。
答案 1 :(得分:0)
数据库服务器可以提前收集自动增量编号。数据库有时会得到5(或10或100)并更新下一个数字的长期存储,而不是只获得所要求的数据,而下一个数字将分配给下一个+ 5(或10或100)。然后在下一次分配下一个时,它会在内存中获得更快的速度,特别是因为它不必存储分配给磁盘的下一个。
时间表:
......等等。
但是,如果数据库服务器在发出所有数字之前停止,那么当它重新启动时,它将查找下一个数字并找到+ 100 - 因此存在差距。通常保证自动编号作为不断增加的值给出,并且应始终是唯一的(观察当达到最大值时会发生什么)。它们通常但不总是顺序的。
(Oracle对Sequences做了同样的事情。自从我使用它以来已经有一段时间了,但是使用序列可以指定缓存大小。保证顺序分配的唯一方法是将缓存大小设置为零,这样会更慢。 )