SELECT COUNT(*) FROM table_name;
我的算法是:GUID。和自動ID在SQL數據庫主鍵
- 檢查計
- 數+ 1爲新的主鍵的起點
- 然後保持每天插入操作前遞增
但這是什麼GUID? SQL Server是否提供了自動生成和增加主鍵的東西?
SELECT COUNT(*) FROM table_name;
我的算法是:GUID。和自動ID在SQL數據庫主鍵
但這是什麼GUID? SQL Server是否提供了自動生成和增加主鍵的東西?
我不確定你是否也在詢問有關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用作主鍵,除非您絕對需要。
創建表的表 (ID INT恆等式(1,1)主鍵, COL1 VARCHAR(10) )
將自動爲您創建的主鍵。 檢查T-SQL中的GUID,目前沒有。
有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作爲關鍵的問題是,如果您要從中間刪除記錄,則最終會生成重複密鑰。 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,通常是依賴於應用程序,政策等
可你犯了一個名爲「INT」列?不管怎樣,我相信你的意思是'id int indentity(1,1)主鍵' – 2010-06-20 18:27:20
是的,我的意思是id int。現在修復它,謝謝。 – Raj 2010-06-20 18:44:47