WEB开发网
开发学院数据库MSSQL Server 使用uniqueidentifier还是IDENTITY生成主键? 阅读

使用uniqueidentifier还是IDENTITY生成主键?

 2008-10-28 10:09:24 来源:WEB开发网   
核心提示:问题 我正在设计一张表,并且决定创建一个自动生成主键值而不是创建自己的模式或者使用自然键,使用uniqueidentifier还是IDENTITY生成主键?,我知道SQL Server提供了全球唯一识别码(GUID),也提供了创建这些值的标识符,把增量值当作它第二个参数值,看看下面的例子,请问这些方法有哪些优缺点呢?专

问题

我正在设计一张表,并且决定创建一个自动生成主键值而不是创建自己的模式或者使用自然键。我知道SQL Server提供了全球唯一识别码(GUID),也提供了创建这些值的标识符。请问这些方法有哪些优缺点呢?

专家解答

确实,你可以通过很多种方法来为你的表自动生成主键值。最常见的一种方法是通过使用IDENTITY字段属性,或者指定带有默认NEWID() 或NEWSEQUENTIALID()函数的唯一识别码数据类型。此外,在SQL Server复制中,全球唯一识别码经常被用在带有更新订阅的合并复制或者事务复制的唯一识别符行中。

最常见也最知名的自动生成主键值的方法是通过在一个通常被声明为整数的字段上使用IDENTITY字段属性。一旦被定义之后,引擎就会根据在字段上声明好的属性来自动生成序列号。IDENTITY属性把原始的种子值当作它第一个参数,把增量值当作它第二个参数值。

看看下面的例子,它创建并且插入到基于标识符的表中,这些表把主键定义为聚集索引:

  SETNOCOUNTON
  GO
  USEMASTER
  GO
  CREATEDATABASEMSSQLTIPS
  GO
  USEMSSQLTIPS
  GO
  --Startat1andincrementby1
  CREATETABLEIDENTITY_TEST1
  (
  IDINTIDENTITY(1,1)PRIMARYKEY,
  TESTCOLUMNCHAR(2000)DEFAULTREPLICATE('X',2000)
  )
  GO
  --Startat10andincrementby10
  CREATETABLEIDENTITY_TEST2
  (
  IDINTIDENTITY(10,10)PRIMARYKEY,
  TESTCOLUMNCHAR(2000)DEFAULTREPLICATE('X',2000)
  )
  GO
  --Startat1000andincrementby5
  CREATETABLEIDENTITY_TEST3
  (
  IDINTIDENTITY(1000,5)PRIMARYKEY,
  TESTCOLUMNCHAR(2000)DEFAULTREPLICATE('X',2000)
  )
  GO
  --INSERT1000ROWSINTOEACHTESTTABLE
  DECLARE@COUNTERINT
  SET@COUNTER=1
  WHILE(@COUNTER<=1000)
  BEGIN
  INSERTINTOIDENTITY_TEST1DEFAULTVALUES
  INSERTINTOIDENTITY_TEST2DEFAULTVALUES
  INSERTINTOIDENTITY_TEST3DEFAULTVALUES
  SET@COUNTER=@COUNTER+1
  END
  GO
  SELECTTOP3IDFROMIDENTITY_TEST1
  SELECTTOP3IDFROMIDENTITY_TEST2
  SELECTTOP3IDFROMIDENTITY_TEST3
  GO

1 2 3 4  下一页

Tags:使用 uniqueidentifier 还是

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接