SQL身份问题(缺少数字)

时间:2018-09-10 10:57:35

标签: c# sql

我创建了一个应用程序,该应用程序连接到MS SQL 2012数据库。我们在当地有60多个客户。 它运作良好,但今天我发现了一个小问题。 检查数据后,我发现缺少ID。

Loaded datas

ID不取决于应用程序,它是SQL设置。当有人保存新数据时(我正在使用“ INSERT”命令),那么sql表会将ID递增1。但是这里缺少19571和19572。

我只是想知道,这怎么可能。

SQL Table Desingner

2 个答案:

答案 0 :(得分:0)

有可能通过事务中的任何插入而回滚,该事务将分配并使用该编号,但是回滚时,您会发现它丢失了。

通常,对于身份字段,您不必担心ID中的空白,它们应被视为任意的唯一标识符。

答案 1 :(得分:0)

大概是指identity列。基本上,SQL Server不能保证无缝数字。唯一的保证就是这些数目会增加-并且在将列声明为uniqueprimary key的情况下是唯一的。

发生这种情况的主要原因有两个。

  1. 失败的更新会“消耗”没有过期的号码。
  2. 优化可以分配一组数字,从而导致在其他序列上插入的上限。

这实际上在documentation中有解释。特别是不能保证以下条件

  
      
  • 价值的唯一性
  •   
  • 交易中的连续值
  •   
  • 服务器重新启动或其他故障后的连续值。 – SQL Server可能出于性能原因缓存身份值。
  •   
  • 重复使用值。
  •