2011-03-14 56 views
7

如果您添加一條新記錄,然後刪除該記錄,然後反覆添加它,遲早,當您添加一個新記錄的整數主鍵ID時,它最終將超過20億次。主鍵ID超過極限時會發生什麼?

  1. 現在會發生什麼? SQL Server將再次從1開始主鍵ID?或-1?

  2. 如果它循環40億次會發生什麼; SQL Server如何知道不會取代以前的數據?

+2

您可以隨時更改你的'ID'數據類型爲'BIGINT',你會得到+/- 9百萬的三次方(也就是** 9張十億數十億** !!!!!)值.....應該足夠**相當長一段時間**! – 2011-03-14 22:17:23

+1

甚至更​​好地使用[唯一標識符/ GUID](http://msdn.microsoft.com/en-us/library/ms187942.aspx),當宇宙爆炸時,您只會用完值! :) – CraigTP 2011-10-06 12:53:56

+0

請注意,不同的DBMS之間的行爲有所不同。這個問題用MS SQL Server標記,所以沒有任何混淆,但如果問題包含「其他DBMS呢?」那麼你最終會得到不同平臺的不同答案。 – 2012-05-26 23:28:57

回答

18

你得到一個錯誤,如果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 
+0

Martin如果發生這種情況,SQL Server開發人員應該怎麼做? – user960567 2014-05-15 06:35:54

+1

@ user960567在大多數情況下,請將數據類型更改爲允許更大的數字。在某些情況下,你可以考慮重編現有行並重置標識種子,但這通常應避免(鍵都應該被認爲是不可改變的,沒有改變或回收一般來說) – 2014-05-16 18:04:22

+0

馬丁謝謝.. – user960567 2014-05-16 18:43:52

8

使用BIGINT看到這一點,你可能永遠不會達到極限。

+0

嗯...身份可以設置開始*真高*烏 – 2011-03-14 23:07:04

+3

使用[唯一標識符/ GUID](http://msdn.microsoft.com/en-us/library/ms187942.aspx) – CraigTP 2011-10-06 12:52:46

相關問題