手机
当前位置:查字典教程网 >编程开发 >mssql数据库 >使用 GUID 值来作为数据库行标识讲解
使用 GUID 值来作为数据库行标识讲解
摘要:GUID(Globaluniqueidentifier)全局唯一标识符,它是由网卡上的标识数字(每个网卡都有唯一的标识号)以及CPU时钟的唯...

GUID(Globaluniqueidentifier)全局唯一标识符,它是由网卡上的标识数字(每个网卡都有唯一的标识号)以及CPU时钟的唯一数字生成的的一个16字节的二进制值。

GUID的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个x是0-9或a-f范围内的一个十六进制的数字。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF即为有效的GUID值。

世界上的任何两台计算机都不会生成重复的GUID值。GUID主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。在Windows平台上,GUID应用非常广泛:注册表、类及接口标识、数据库、甚至自动生成的机器名、目录名等。

在这次开发ASP.NET应用时,我大量使用了类型为GUID的ID列作为各实体表的关键字(键)。由于其唯一、易产生的特性,给应用程序处理带来诸多好处。

1、在SQLServer中使用GUID

如果在SQLServer的表定义中将列类型指定为uniqueidentifier,则列的值就为GUID类型。

SQLServer中的NewID()函数可以产生GUID唯一值,使用此函数的几种方式如下:

1)作为列默认值

将uniqueidentifier的列的默认值设为NewID(),这样当新行插入表中时,会自动生成此列GUID值。

2)使用T-SQL

在T-SQL中使用NewID()函数,如“INSERTINTOTable(ID,...)VALUES(NewID(),...)”来生成此列的GUID值。

3)提前获取GUID值

由于特殊功能需要,需要预先获知新行的ID值,也可以使用如下C#代码提前获得GUID的值,再存储到数据库中:

SqlCommandcmd=NewSqlCommand();

cmd.CommandText="SELECTNewID()";

stringrowID=(string)cmd.ExecuteScalar();

cmd.CommandText="INSERTINTOTable(ID,...)VALUES(@ID,...)

cmd.Parameters.Add("@ID",SqlDbType.UniqueIdentifier).Value=newGuid(rowID);

cmd.ExecuteNoQuery();

uniqueidentifier值不能进行算术运算,但可以进行(意义不大的)比较操作和NULL检查;它不能象IDENTITY列一样,可以获知每行的增加时间的先后顺序,只能通过增加其它时间或时间戳列来完成此功能。

2、在.NET中使用GUID

GUID在.NET中使用非常广泛,而且.NETFramework提供了专门Guid基础结构。

Guid结构的常用法包括:

1)Guid.NewGUID()

生成一个新的GUID唯一值

2)Guid.ToString()

将GUID值转换成字符串,便于处理

3)构造函数Guid(string)

由string生成Guid结构,其中string可以为大写,也可以为小写,可以包含两端的定界符“{}”或“()”,甚至可以省略中间的“-”,Guid结构的构造函数有很多,其它构造用法并不常用。

同时,为了适用数据库中使用GUID的需要,.NETFramework也提供了SqlGUID结构,它和Guid结构类似,只是两者对排序(CompareTo)的处理方式不同,SqlGuid计算值的最后6个字节。而Guid计算全部16个字节,这种差异可能会给SQLServer中uniqueidentifier列的排序带来一定影响,当然这种排序意义也不大。

.NETFramework中可以使用类GuidConverter提供将Guid结构与各种其他表示形式相互转换的类型转换器。

3、GUID的优缺点

1)优点

同IDENTITY列相比,uniqueidentifier列可以通过NewID()函数提前得知新增加的行ID,为应用程序的后续处理提供了很大方便。

便于数据库移植,其它数据库中并不一定具有IDENTITY列,而Guid列可以作为字符型列转换到其它数据库中,同时将应用程序中产生的GUID值存入数据库,它不会对原有数据带来影响。

便于数据库初始化,如果应用程序要加载一些初始数据,IDENTITY列的处理方式就比较麻烦,而uniqueidentifier列则无需任何处理,直接用T-SQL加载即可。

便于对某些对象或常量进行永久标识,如类的ClassID,对象的实例标识,UDDI中的联系人、服务接口、tModel标识定义等。

2)缺点

GUID值较长,不容易记忆和输入,而且这个值是随机、无顺序的,所以使用时要注意场合,最好不要尝试用它来作为你的电子邮件地址J

GUID的值有16个字节,与其它那些诸如4字节的整数相比要相对大一些。这意味着如果在数据库中使用uniqueidentifier键,可能会带来两方面的消极影响:存储空间增大;索引时间较慢。

综合来说,GUID的优点带来的便利远超出其缺点带来的影响,随着诸如WebService等系统互联与整合技术的不断发展,其唯一标识的特性使得其应用越来越广,在您的应用程序中也应考虑使用它了。

【使用 GUID 值来作为数据库行标识讲解】相关文章:

SQL Server 数据库自动执行管理任务

sqlserver使用窗口函数实现分页

SQL数据类型详解

SQL SERVER 数据页面头部结构解析

SQL Server 2005 DTS导入平面数据出现错误解决方案

sql server 常用的几个数据类型

如何用PowerDesigner设计SQL Server数据库

使用Sqlserver事务发布实现数据同步(sql2008)

使用sql server management studio 2008 无法查看数据库,提示 无法为该请求检索数据 错误916解决方法

sql server 2008数据库无法启动的解决办法(图文教程)

精品推荐
分类导航