2010-06-20 26 views
0
SELECT COUNT(*) FROM table_name; 

我的算法是:GUID。和自動ID在SQL數據庫主鍵

  • 檢查計
  • 數+ 1爲新的主鍵的起點
  • 然後保持每天插入操作前遞增

但這是什麼GUID? SQL Server是否提供了自動生成和增加主鍵的東西?

回答

3

我不確定你是否也在詢問有關IDENTITY或GUID是唯一的標識符(幾乎)保證是唯一的。它可以在主鍵上使用,但不建議使用,除非您正在執行脫機工作或計劃合併數據庫。

例如 「正常」,IDENTITY主鍵是

1 Jason 
2 Jake 
3 Mike 

與另一數據庫,它看起來像

1 Lisa 
2 John 
3 Sam 

將是棘手的合併時。你得重新輸入某些列,請確保您的FKS是爲了等使用的GUID,數據看起來是這樣的,而且很容易合併:

1FB74D3F-2C84-43A6-9FB6-0EFC7092F4CE Jason 
845D5184-6383-473F-A5D6-4DE98DBFBC39 Jake 
8F515331-4457-49D0-A9F5-5814EE7F50BA Mike  
CE789C89-E01F-4BCE-AC05-CBDF10419E78 Lisa 
4D51B568-107C-4B63-9F7F-24592704118F John 
7FA4ED64-7356-4013-A78A-C8CCAB329954 Sam 

注意,一個GUID需要除了INT之外,還有更多的空間,因此建議將INT用作主鍵,除非您絕對需要。

1

創建表的表 (ID INT恆等式(1,1)主鍵, COL1 VARCHAR(10) )

將自動爲您創建的主鍵。 檢查T-SQL中的GUID,目前沒有。

+0

可你犯了一個名爲「INT」列?不管怎樣,我相信你的意思是'id int indentity(1,1)主鍵' – 2010-06-20 18:27:20

+0

是的,我的意思是id int。現在修復它,謝謝。 – Raj 2010-06-20 18:44:47

5

有3個選項

CREATE TABLE A 
(
ID INT IDENTITY(1,1) PRIMARY KEY, 
... Other Columns 
) 

CREATE TABLE B 
(
ID UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY, 
... Other Columns 
) 

CREATE TABLE C 
(
ID UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID() PRIMARY KEY, 
... Other Columns 
) 

原因之一,你可能更喜歡是C而不是B.將減少碎片,如果你使用的ID as the clustered index

1

使用計數,然後計數+1作爲關鍵的問題是,如果您要從中間刪除記錄,則最終會生成重複密鑰。 EG:

Key Data  
1  A   
2  B 
3  C 
4  D 

現在刪除B(計數變爲3),並插入E.這試圖使新的主密鑰作爲4,其已經存在。

Key Data  
1  A   
3  C 
4  D <--After delete count = 3 here 
4  E <--Attempted insert with key 4  

您可以使用主鍵和自動遞增,以確保你沒有這個問題

CREATE TABLE myTable 
(
    P_Id int NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (P_Id) 
) 

或者你可以使用GUID。如何的GUID工作是通過創建128位的整數(表示爲一個32字符十六進制字符串)

Key          Data 
24EC84E0-36AA-B489-0C7B-074837BCEA5D  A 
. 
. 

這導致2^128個可能值(reaaally大),所以建立了類似的值的可能性由一個計算機是非常小。除此之外,還有一些算法可以幫助嘗試並確保不會發生。所以GUID也是一個關鍵的不錯選擇。

至於是否使用整數或GUID,通常是依賴於應用程序,政策等