SELECT COUNT(*) FROM table_name;
我的算法是:
但是这个GUID是什么? SQL Server是否提供了自动生成和增加主键的功能?
答案 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,通常依赖于应用程序,策略等。