GUID。和自动id作为SQL数据库中的主键

时间:2010-06-20 18:14:09

标签: tsql sql-server-2005 primary-key

SELECT COUNT(*) FROM table_name;

我的算法是:

  • check count
  • count + 1是新的主键起点
  • 然后在每次插入操作之前继续递增

但是这个GUID是什么? SQL Server是否提供了自动生成和增加主键的功能?

4 个答案:

答案 0 :(得分:8)

有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
)

如果您使用ID as the clustered index,您可能更喜欢C而不是B的一个原因是减少碎片。

答案 1 :(得分:4)

我不确定你是否也在询问IDENTITY,但GUID是一个(几乎)保证唯一的唯一标识符。它可以在主键上使用,但除非您正在进行脱机工作或计划合并数据库,否则不建议使用它。

例如“正常”,IDENTITY主键是

1   Jason
2   Jake
3   Mike

当与另一个看起来像

的数据库合并时
1   Lisa
2   John
3   Sam

会很棘手。你必须重新键入一些列,确保你的FK正常,等等。使用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作为主键,除非您绝对需要。

答案 2 :(得分:1)

创建表格 (id int indentity(1,1)主键, col1 varchar(10) )

会自动为您创建主键。 检查T-SQL中的GUID,现在没有它。

答案 3 :(得分:1)

使用count,然后将+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个可能的值(实际上很大),因此一台计算机创建的类似值的可能性非常小。此外,有一些算法可以帮助尝试并确保不会发生这种情况。所以GUID也是一个很好的选择。

至于是使用整数还是GUID,通常依赖于应用程序,策略等。