我创建了一个应用程序,该应用程序连接到MS SQL 2012数据库。我们在当地有60多个客户。 它运作良好,但今天我发现了一个小问题。 检查数据后,我发现缺少ID。
ID不取决于应用程序,它是SQL设置。当有人保存新数据时(我正在使用“ INSERT”命令),那么sql表会将ID递增1。但是这里缺少19571和19572。
我只是想知道,这怎么可能。
答案 0 :(得分:0)
有可能通过事务中的任何插入而回滚,该事务将分配并使用该编号,但是回滚时,您会发现它丢失了。
通常,对于身份字段,您不必担心ID中的空白,它们应被视为任意的唯一标识符。
答案 1 :(得分:0)
大概是指identity
列。基本上,SQL Server不能保证无缝数字。唯一的保证就是这些数目会增加-并且在将列声明为unique
或primary key
的情况下是唯一的。
发生这种情况的主要原因有两个。
这实际上在documentation中有解释。特别是不能保证以下条件
- 价值的唯一性
- 交易中的连续值
- 服务器重新启动或其他故障后的连续值。 – SQL Server可能出于性能原因缓存身份值。
- 重复使用值。