uniqueidentifier 数据类型(转)
想要产生这种唯一标识的格式的数据:

6F9619FF-8B86-D011-B42D-00C04FC964FF


应该怎么做呢?

================================================================

答:

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 常量:

字符串格式:'6F9619FF-8B86-D011-B42D-00C04FC964FF'
二进制格式:0xff19966f868b11d0b42d00c04fc964ff

uniqueidentifier 数据类型不会按照 IDENTITY 属性的方式为插入的行自动生成新的 ID。例如,若要获取新的 uniqueidentifier 值,则表必须具有指定 NEWID 函数或 NEWSEQUENTIALID 函数的 DEFAULT 子句,或 INSERT 语句必须使用 NEWID 函数。



CREATE TABLE MyUniqueTable
(UniqueColumn UNIQUEIDENTIFIER DEFAULT NEWID(),
Characters VARCHAR(10) )
GO
INSERT INTO MyUniqueTable(Characters) VALUES ('uiok')
INSERT INTO MyUniqueTable VALUES (NEWID(), 'uiok')
GO
注意:

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

uniqueidentifier 列中可以多次出现某个 uniqueidentifier 值,除非对该列也指定了 UNIQUE PRIMARY KEY 约束。当多个行引用源表中的同一个主键时,引用其他表中 uniqueidentifier 主键的外键列中可以多次出现各个 uniqueidentifier 值。

一个表可以有多个 uniqueidentifier 列。每个表中可以指定一个具有 ROWGUIDCOL 属性的 uniqueidentifier 列。ROWGUIDCOL 属性指明此列的 uniqueidentifier 值可唯一地标识表中的行。但是,属性不会执行任何强制实现唯一性的操作。必须使用其他机制强制实现唯一性,例如指定列的 PRIMARY KEY 约束。ROWGUIDCOL 属性主要用于 Microsoft SQL Server 2005 复制。具有更新订阅的合并复制和事务复制使用 uniqueidentifier 列来确保在表的多个副本中唯一地标识行。


uniqueidentifier 数据类型具有下列缺点:

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

这些值是随机的,而且它们不支持任何使其对用户更有意义的模式。

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

uniqueidentifier 16 字节时,其数据类型比其他数据类型(例如 4 字节的整数)大。这意味着使用 uniqueidentifier 键生成索引的速度相对慢于使用 int 键生成索引的速度。

在不要求全局唯一性或首选使用按序列增加的键时,请考虑使用 IDENTITY 属性。




uniqueidentifier IDENTITY

uniqueidentifier 根据 NEWID 产生的值是唯一的,可以作为主键,IDENTITY 表示标识,也是自增的,可以作为主键,那么用哪个好呢。
一、uniqueidentifier 不适用于 Access 数据库。
二、uniqueidentifier 长度为 16,如此长的值很难让人记住;IDENTITY 一般用 int 类型即长度为 4,且为数字较好记。
三、uniqueidentifier 不能像 IDENTITY 一样判断记录插入的先后顺序。
四、uniqueidentifier索引占用的空间更大,所以其效率比int索引的效率低一些。
五、uniqueidentifier主要用于在拥有多个节点、多台计算机的网络,必须分配具有唯一性的标识符,因为世界上的任何两台计算机都不会生成重复的GUID值。
所以有人建议用 uniqueidentifier 代替 IDENTITY 是缺乏根据的,是片面的。
uniqueidentifier数据类型在系统设计中的应用

什么是uniqueidentifier

Uniqqueidentifier 是全局唯一的标识


UniqueIdentifier    数据类型的列如何赋值?

      1 使用 NewID()函数 来实现
      2 直接将字符串的常量转化成这样的格式 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
      举例:6F9619FF-8B86-D011-B42D-00C04FC964FF 为有效的UniqueIdentifier数据
      3 直接赋于32位的十六位数据
      举例 0xffffffff00000000ffffffff00000000

UniqueIdentifier 数据类型 数据实际是怎么在数据库中保存的?

UniqueIdentifier 数据类型存储实际的数据是16个字节的二进制值,
UniQueIdentifier 可以转化成实际的字符串型和二进制数据类型


NewID()函数是如何生成唯一的UniqueIdentifier 值的呢?

NewID()函数是从他们的网卡上的标识数字和CPU时钟的唯一的数字生成新的UniqueIdentifier数据 ,这个数据和GUID是一样的每台计算机能生成全球唯一的值,这样在多台计算机和多网络之间生成具有唯一性的标识符


  使用 Uniqueidentifier数据类型的主要的优点

    Uniqueidentifier 数据类型主要的优点是在使用newid函数生成值的时候是可以保证值的全球唯一性,可以唯一的标识单行的记录 ,对于多库(尤其是多机器,多网段的数据库的复制)来将比IDEntity来的更有效
    其次在使用Identity的情况下,我们对自动生成的值是不能修改的,而Uniqueidentifier数据类型是可以随时修改的


  使用Uniqueidentifier的数据类型的缺点

    1 对于生成的Uniqueidentifier 类型的值来讲,是无序;在正常显示相关的数据信息的时候,返回的信息是无序的。
对于 Identity 为标识的数据显示的时候,默认的情况下是根据添加记录的顺序来显示的。这样,对于uniqueidentifier为主键的信息集 ,还是需要一个默认标识排序的字段。

    2 对于Uniqueidentifier 字段来将数据的实际的信息为16个字节,相对来将比Identity来讲
大的多,相对来将 存储空间和查询的效率会降低很多的。



  在系统数据库的设计中我们如何对Uniqueidentifier,Identity ,和可标识的记录属性(有实际的含义的信息)作为主键 ,这三种方式 进行取舍

以属性为主键的系统设计情况
     在系统设计的过程中,单条信息中包含可以表示唯一性的属性(一般不能太多3个以内)而且这样的属性是必填字段。在记录生存周期内一般是不进行改动的,表一般多于50个这样级别的系统以属性为主键 ,这样的方式还是最佳的

    举例: 关于学生的管理信息系统 以学生的学号为主键

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。