如果你添加一条新记录,然后删除该记录,再反复添加,久而久之,当你添加一条新记录的整数主键id,最终会超过20亿。
现在会发生什么呢?SQL Server会再次从1开始主键id? 还是-1?
如果循环40亿次会怎么样;SQL Server怎么知道不替换之前的数据?
你会得到一个错误,如果 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
使用BIGINT,你很可能永远不会达到极限。
这是我在一个 类似问题 而我就把它留在这里,以方便以后可能担心BIGINT的溢出的用户。
如果使用1开始的BIGINT IDENTITY,每秒插入一千行,那么你需要2.92亿年的时间,才会达到922四亿年的极限,令人瞠目结舌。