主键Id超标后会怎样?

问题描述 投票:12回答:3

如果你添加一条新记录,然后删除该记录,再反复添加,久而久之,当你添加一条新记录的整数主键id,最终会超过20亿。

  1. 现在会发生什么呢?SQL Server会再次从1开始主键id? 还是-1?

  2. 如果循环40亿次会怎么样;SQL Server怎么知道不替换之前的数据?

sql-server sql-server-2005 sql-server-2008
3个回答
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

8
投票

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


0
投票

这是我在一个 类似问题 而我就把它留在这里,以方便以后可能担心BIGINT的溢出的用户。

如果使用1开始的BIGINT IDENTITY,每秒插入一千行,那么你需要2.92亿年的时间,才会达到922四亿年的极限,令人瞠目结舌。

© www.soinside.com 2019 - 2024. All rights reserved.