SqlServer中的UniqueIdentifier数据类型介绍

您可以使用 NEWSEQUENTIALID 生成 GUID
以减少叶级别索引上的页争用。NEWSEQUENTIALID 只能与 uniqueidentifier
类型的表列的 DEFAULT 约束一起使用。

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

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

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

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

使用 NEWID 函数。

将字符串常量转换为如下形式。例如,6F9619FF-8B86-D011-B42D-00C04FC964FF
即为有效的 uniqueidentifier 值。 比较运算符可与 uniqueidentifier
值一起使用。然而,排列并非通过比较两个值的位模式来实现。允许对
uniqueidentifier 值执行的操作只有比较 (=, , , , =, =) 和检查
NULL。不允许使用其它算术运算符。所有的列约束及属性均允许用于
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) )GOINSERT 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
值的顺序。它们不适用于那些依赖递增的键值的现有应用程序

发表评论

电子邮件地址不会被公开。 必填项已用*标注