主键ID超过限制时会发生什么?

001*_*001 12 sql-server sql-server-2005 sql-server-2008

如果你添加一条新记录,然后删除该记录,然后一次又一次地重复添加它,及时,迟早,当你添加一个新的记录整数主键id时,它最终会超过20亿.

  1. 现在发生了什么?SQL Server将再次从1启动主键ID?还是-1?

  2. 如果它循环40亿次会发生什么; SQL Server如何知道不替换以前的数据?

Mar*_*ith 22

如果identity超出数据类型的范围会导致问题的其余部分无效,则会出现错误.你可以看到这个

CREATE TABLE #T
(
id INT IDENTITY(2147483647,1)
)

INSERT INTO #T
DEFAULT VALUES

INSERT INTO #T
DEFAULT VALUES /*Arithmetic overflow error converting IDENTITY to data type int.*/

GO

SELECT * FROM #T

DROP TABLE #T
Run Code Online (Sandbox Code Playgroud)

  • @ user960567在大多数情况下,更改数据类型以允许更大的数字。在某些情况下,您可以考虑对现有行进行重新编号并重置标识种子,但是通常应避免这样做(通常应将键视为不变的,并且不得更改或回收) (2认同)

小智 8

使用BIGINT,你可能永远不会达到极限.

  • 使用[唯一标识符/ GUID](http://msdn.microsoft.com/en-us/library/ms187942.aspx) (3认同)

Cha*_*lie 6

这是我在类似问题上找到的评论 ,我将把它留在这里,供未来可能担心 BIGINT 溢出的用户使用。

如果您使用从 1 开始的 BIGINT IDENTITY,并且每秒插入一千行,则需要令人难以置信的 2.92 亿年才能达到 922 千万亿的限制