龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > Sql Server开发 >

SqlServer中的UniqueIdentifier数据类型介绍

时间:2013-01-03 18:08来源:未知 作者:admin 点击:
分享到:
您可以使用 NEWSEQUENTIALID 生成 GUID 以减少叶级别索引上的页争用。NEWSEQUENTIALID 只能与 uniqueidentifier 类型的表列的 DEFAULT 约束一起使用。 CREATE TABLE MyUniqueTable (UniqueColumn UNIQUEIDENTIFIER DEFAU
您可以使用 NEWSEQUENTIALID 生成 GUID 以减少叶级别索引上的页争用。NEWSEQUENTIALID 只能与 uniqueidentifier 类型的表列的 DEFAULT 约束一起使用。

CREATE TABLE MyUniqueTable
   (UniqueColumn   UNIQUEIDENTIFIER      DEFAULT NEWID(),
   Characters      VARCHAR(10) )
GO
INSERT INTO MyUniqueTable(Characters) VALUES ('abc')
INSERT INTO MyUniqueTable VALUES (NEWID(), 'def')
GO


uniqueidentifier是全局唯一标识符   (GUID)
NEWID()返回类型为uniqueidentifier
SQL   SERVER联机帮助中的例子:
declare   @myid   uniqueidentifier
set   @myid=newid()
print   'Value   of   @myid   is   '+cast(@myid   as   varchar(255))
每次运行以上程序返回不同的uniqueidentifier


uniqueidentifier
全局唯一标识符   (GUID)。

注释
uniqueidentifier   数据类型的列或局部变量可用两种方法初始化为一个值: 

使用   NEWID   函数。


将字符串常量转换为如下形式(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,其中每个   x   是   0-9   或   a-f   范围内的一个十六进制的数字)。例如,6F9619FF-8B86-D011-B42D-00C04FC964FF   即为有效的   uniqueidentifier   值。 
比较运算符可与   uniqueidentifier   值一起使用。然而,排列并非通过比较两个值的位模式来实现。允许对   uniqueidentifier   值执行的操作只有比较   (=,   <> ,   <,   > ,   <=,   > =)   和检查   NULL(IS   NULL   和   IS   NOT   NULL)。不允许使用其它算术运算符。所有的列约束及属性(IDENTITY   除外)均允许用于   uniqueidentifier   数据类型。 


使用   uniqueidentifier   数据
uniqueidentifier   数据类型存储   16   字节的二进制值,该值的使用与全局唯一标识符   (GUID)   一样。GUID   是一个唯一的二进制数字;世界上的任何两台计算机都不会生成重复的   GUID   值。GUID   主要用于在拥有多个节点、多台计算机的网络中,分配必须具有唯一性的标识符。

uniqueidentifier   列的   GUID   值通常由以下方式获得: 

在   Transact-SQL   语句、批处理或脚本中调用   NEWID   函数。


在应用程序代码中,调用返回   GUID   值的应用程序   API   函数或方法。 
Transact-SQL   NEWID   函数以及应用程序   API   函数和方法从它们网卡上的标识数字以及   CPU   时钟的唯一数字生成新的   uniqueidentifier   值。每个网卡都有唯一的标识号。由   NEWID   返回的   uniqueidentifier   使用服务器上的网卡生成。由应用程序   API   函数和方法返回的   uniqueidentifier   使用客户机上的网卡生成。

一般不将   uniqueidentifier   定义为常量,因为很难保证实际创建的   uniqueidentifier   具有唯一性。指定   uniqueidentifier   常量的方法有两种: 

字符串格式 
'6F9619FF-8B86-D011-B42D-00C04FC964FF '

二进制格式 
0xff19966f868b11d0b42d00c04fc964ff

uniqueidentifier   数据类型不象IDENTITY   属性那样为新插入的行自动生成新的ID。为了得到新的   uniqueidentifier   值,表必须具有一个指定   NEWID   函数的   DEFAULT   子句,或使用   NEWID   函数的   INSERT   语句:

CREATE   TABLE   MyUniqueTable
      (UniqueColumn       UNIQUEIDENTIFIER             DEFAULT   NEWID(),
      Characters             VARCHAR(10)   )
GO
INSERT   INTO   MyUniqueTable(Characters)   VALUES   ( 'abc ')
INSERT   INTO   MyUniqueTable   VALUES   (NEWID(),   'def ')
GO

uniqueidentifier   列可以包含多次出现的   uniqueidentifier   值,除非也对此列指定了   UNIQUE   或   PRIMARY   KEY   约束。当有多行引用源表中的同一主键时,引用其它表的   uniqueidentifier   主键的外键列将包含多次出现的个别   uniqueidentifier   值。

一个表可以有多个   uniqueidentifier   列。每个表中可以指定一个具有   ROWGUIDCOL   属性的   uniqueidentifier   列。ROWGUIDCOL   属性表明此列的   uniqueidentifier   值唯一地标识表中的行。但是,该属性并没有执行该唯一性。唯一性必须通过其它机制来执行,比如为列指定   PRIMARY   KEY   约束。ROWGUIDCOL   属性主要用于   SQL   Server   复制。

uniqueidentifier   数据类型的主要优点是保证由   Transact-SQL   NEWID   函数或应用程序   GUID   函数生成的值在全球是唯一的。

  uniqueidentifier   数据类型的具有几个缺点: 

值长且难懂。这使用户难以正确键入它们,并且更难记住。


这些值是随机的,而且它们不能接受任何使它们对用户变得更有意义的模式。


没有任何方式可以决定生成   uniqueidentifier   值的顺序。它们不适用于那些依赖递增的键值的现有应用程序


精彩图集

赞助商链接