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