威尼斯www.9778.com-威尼斯正版官方网站

全球唯一标识GUID

日期:2020-03-01编辑作者:数据库

uniqueidentifier数据类型可存储16字节的二进制值,其效劳与全局独一标识符相符。GUID是独一的二进制数:世界上的任何两台微型机都不会转换重复的GUID值。

GUID(Global unique identifier)全局独一标记符,它是由网卡上的标记数字(每一种网卡都有独一的标暗记卡塔尔(قطر‎以及CPU 时钟的独一数字生成的的叁个 16 字节的二进制值。

图片 1 使用 GUID 值来作为数据库行标记

在SQL中 ROWGUIDCOL表示新列是行的全局独一标志列。对于每一个表只可以指使一个uniqueidentifier 列作为ROWGUIDCO列。ROWGUIDCOL属性只好支使给uniqueidentifier列

GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,此中每一个 x 是 0-9 或 a-f 范围内的贰个十三进制的数字。举个例子:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为使得的 GUID 值。

[ 分类:付出资料]   [阅读:10849 ]   [ 日期:2007-5-1 ]   [ 来自:飘雪专业室 ]

uniqueidentifier数据类型的赋值方法:

世界上的别的两台微Computer都不会变卦重复的 GUID 值。GUID 首要用于在有着多少个节点、多台Computer的互连网或系统中,分配必得有所独一性的标记符。在 Windows 平台上,GUID 应用极度普及:注册表、类及接口标志、数据库、以至自动生成的机器名、目录名等。

GUID(Global unique identifier)全局独一标记符,它是由网卡上的标记数字(每一个网卡都有独一的标志号卡塔尔(قطر‎甚至 CPU 时钟的独一数字生成的的三个 16 字节的二进制值。

1.选取NewID(卡塔尔函数来兑现

在此番支付 ASP.NET 应用时,小编大方用到了档案的次序为 GUID 的 ID 列作为各实体表的机要字(键卡塔尔(قطر‎。由于其独一、易发生的性状,给应用程序管理带给超级多平价。

GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,个中每种 x 是 0-9 或 a-f 范围内的二个十九进制的数字。比如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为使得的 GUID 值。

2.直接将字符串的常量转变为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

1、在 SQL Server 中使用 GUID

世界上的别样两台计算机都不会变动重复的 GUID 值。GUID 首要用来在全部多少个节点、多台Computer的互连网或系统中,分配必须持有独一性的标志符。在 Windows 平台上,GUID 应用极度广泛:注册表、类及接口标记、数据库、以至自动生成的机器名、目录名等。

例如:6F9619FF-8B86-D011-B42D-00C04FC964FF

假若在 SQL Server 的表定义中将列类型钦点为 uniqueidentifier,则列的值就为 GUID 类型。

在这一次支付 ASP.NET 应用时,小编大方用到了档期的顺序为 GUID 的 ID 列作为各实身体表面的入眼字(键卡塔尔。由于其独一、易发生的特征,给应用程序管理带给超多功利。

3.一直予以三12个人的十几人数据

SQL Server 中的 NewID(卡塔尔 函数能够生出 GUID 独一值,使用此函数的三种办法如下:

1、在 SQL Server 中使用 GUID

例如:0xffffffff00000000ffffffff00000000

1卡塔尔(قطر‎ 作为列暗中同意值

要是在 SQL Server 的表定义团长列类型内定为 uniqueidentifier,则列的值就为 GUID 类型。

其它

将 uniqueidentifier 的列的暗中认可值设为 NewID(卡塔尔国,那样当新行插入表中时,会自动生成此列 GUID 值。

SQL Server 中的 NewID(卡塔尔(قطر‎ 函数能够发生 GUID 独一值,使用此函数的二种方法如下:

在SQL Server 二零零六中有一个数据类型uniqueidentifier,那几个数据类型正是用来帮忙GUID(Global Unique Identifier卡塔尔。这几个类型的值是一个长短为32的定长字符串,例如00000002-3378-a87f-92pj-2t68i97o34ms。GUID能够确认保障该ID的大局独一性,方便数据库整合,防止因为数量人机联作Copy以至倒车进度中因为ID类似引起不必要的冲突。在C#中有Guid类,方便大家转移和操作GUID。举个例子Guid.NewGuid.ToString(卡塔尔(قطر‎就足以收获一个新的GUID字符串。其实,GUID本质上得以以为是岁月戳的MD5 Hash。在Lotus中,每种Document都有叁个大局的独一标志称作UNID(unique identifier卡塔尔(قطر‎。这几个UNID和上述GUID有着相似的编写制定。笔者在新近的项目中就完事了Lotus文书档案数据库向SQL Server 关周详据库转变的办事。涉及了非常多的GUID和UNID的操作。在SQL Server 二零零六中,uniquidentifier类型值总是能够用casting转变为定长的varchar类型。

2)使用 T-SQL

1State of Qatar 作为列私下认可值

在 T-SQL 中央银行使 NewID(卡塔尔函数,如“INSERT INTO Table(ID,... 卡塔尔(قطر‎VALUES(NewID(卡塔尔国,...卡塔尔”来生成此列的 GUID 值。

将 uniqueidentifier 的列的暗许值设为 NewID(卡塔尔国,那样当新行插入表中时,会自动生成此列 GUID 值。

3卡塔尔提前取得 GUID 值

2)使用 T-SQL

鉴于独特成效要求,要求事情未发生前得悉新行的 ID 值,也足以利用如下 C# 代码提前收获 GUID 的值,再囤积到数据库中:

在 T-SQL 中应用 NewID(卡塔尔函数,如“INSERT INTO Table(ID,... State of Qatar VALUES(NewID(卡塔尔国,...卡塔尔”来生成此列的 GUID 值。

SqlCommand cmd = New SqlCommand();
cmd.CommandText = "SELECT NewID()";
string rowID = (string) cmd.ExecuteScalar();
cmd.CommandText = "INSERT INTO Table(ID,...) VALUES(@ID,...)
cmd.Parameters.Add("@ID",SqlDbType.UniqueIdentifier).Value = new Guid(rowID);
cmd.ExecuteNoQuery();

3卡塔尔(قطر‎提前获得 GUID 值

uniqueidentifier 值不可能开展算术运算,但能够张开(意义十分小的State of Qatar相比操作和 NULL 检查;它不可能象 IDENTITY 列一样,能够获知每行的增加时间的前后相继顺序,只好通过增添此外时间或时刻戳列来完毕此效率。

鉴于特殊作用需求,要求事情发生前获知新行的 ID 值,也能够选取如下 C# 代码提前得到 GUID 的值,再囤积到数据库中:

2、在 .NET 中使用 GUID

 SqlCommand cmd = New SqlCommand();
 cmd.CommandText = "SELECT NewID()";
 string rowID = (string) cmd.ExecuteScalar();
 cmd.CommandText = "INSERT INTO Table(ID,...) VALUES(@ID,...)
 cmd.Parameters.Add("@ID",SqlDbType.UniqueIdentifier).Value = new Guid(rowID);
 cmd.ExecuteNoQuery();

GUID 在 .NET 中应用特别普及,何况 .NET Framework 提供了非常 Guid 根底构造。

uniqueidentifier 值不能够扩充算术运算,但能够举办(意义超级小的卡塔尔国相比操作和 NULL 检查;它无法象 IDENTITY 列同样,能够摸清每行的加码时间的前后相继顺序,只好通过扩充此外时间或时刻戳列来成功此意义。

Guid 布局的常用法包罗:

2、在 .NET 中使用 GUID

1) Guid.NewGUID()

GUID 在 .NET 中利用十一分广泛,何况 .NET Framework 提供了特地 Guid 底工构造。

变迁二个新的 GUID 唯一值

Guid 布局的常用法包含:

2) Guid.ToString()

1) Guid.NewGUID() 

将 GUID 值调换到字符串,便于管理

改换二个新的 GUID 独一值

3卡塔尔结构函数 Guid(string卡塔尔国

2) Guid.ToString()

由 string 生成 Guid 构造,个中string 可以为大写,也足感觉小写,能够包括两端的定界符“{}”或“(卡塔尔(قطر‎”,以至足以大约中间的“-”,Guid 布局的布局函数有那多少个,此外协会用法并临时用。

将 GUID 值转变到字符串,便于管理

还要,为了适用数据库中使用 GUID 的内需,.NET Framework 也提供了 SqlGUID 布局,它和 Guid 布局相仿,只是两者对排序(CompareTo卡塔尔的管理形式不相同,SqlGuid 总计值的尾声 6 个字节。而 Guid 总括全部 16 个字节,这种差别只怕会给 SQL Server 中 uniqueidentifier 列的排序带给一定影响,当然这种排序意义也非常小。

3卡塔尔(قطر‎构造函数 Guid(stringState of Qatar 

.NET Framework 中可以运用类 GuidConverter 提供将 Guid 构造与种种别的代表格局互相调换的门类转变器。

由 string 生成 Guid 布局,在那之中string 可认为大写,也得认为小写,能够分包两端的定界符“{}”或“(卡塔尔”,以致足以轻松中间的“-”,Guid 布局的布局函数有成都百货上千,别的协会用法并不时用。

3、GUID 的得失

还要,为了适用数据库中使用 GUID 的急需,.NET Framework 也提供了 SqlGUID 构造,它和 Guid 构造相仿,只是两个对排序(CompareTo卡塔尔(قطر‎的管理方式区别,SqlGuid 总括值的结尾 6 个字节。而 Guid 总括全部 16 个字节,这种反差或者会给 SQL Server 中 uniqueidentifier 列的排序带给一定影响,当然这种排序意义也超级小。 

1) 优点

.NET Framework 中能够接收类 GuidConverter 提供将 Guid 布局与各个其余代表格局相互调换的花色调换器。

同 IDENTITY 列相比较,uniqueidentifier 列能够通过 NewID(卡塔尔函数提前获悉新增添的行 ID,为应用程序的接续管理提供了十分的大方便。

3、GUID 的利害

惠及数据库移植,别的数据库中并不一定具备 IDENTITY 列,而 Guid 列能够充当字符型列转形成其余数据库中,同时将应用程序中发出的 GUID 值存入数据库,它不会对原有数据推动影响。

1) 优点

有利数据库起始化,假诺应用程序要加载一些初叶数据, IDENTITY 列的管理方式就相比较困苦,而 uniqueidentifier 列则无需任哪个地方理,间接用 T-SQL 加载就可以。

同 IDENTITY 列相比,uniqueidentifier 列能够由此 NewID(卡塔尔国 函数提前得悉新扩张的行 ID,为应用程序的存在延续管理提供了比非常的大实惠。

福利对少数对象或常量举办长久标志,如类的 ClassID,对象的实例标记,UDDI 中的联系人、服务接口、tModel标记定义等。
2) 缺点

惠及数据库移植,此外数据库中并不一定具备 IDENTITY 列,而 Guid 列能够看作字符型列转变来其余数据库中,同期将应用程序中发生的 GUID 值存入数据库,它不会对本来数据拉动影响。

GUID 值较长,不易于回想和输入,并且这些值是随便、无顺序的,所以利用时要小心场所,最棒不要品味用它来作为你的电子邮件地址 J

方便人民群众数据库初始化,若是应用程序要加载一些最早数据, IDENTITY 列的管理方式就相比麻烦,而 uniqueidentifier 列则无需任什么地点理,直接用 T-SQL 加载就能够。

GUID 的值有 16 个字节,与其余这一个诸如 4 字节的平头比较要相对大学一年级部分。那象征假诺在数据库中运用 uniqueidentifier 键,可能会带给双方面包车型地铁懊丧影响:存款和储蓄空间增大;索引时间很慢。

方便对某个对象或常量举行永恒标记,如类的 ClassID,对象的实例标记,UDDI 中的联系人、服务接口、tModel标志定义等。
2) 缺点

GUID 值较长,不易于回忆和输入,并且以此值是随意、无顺序的,所以选择时要留意场馆,最好不要尝试用它来作为你的电子邮件地址 J

GUID 的值有 16 个字节,与其余那么些诸如 4 字节的大背头相比要相对大片段。那意味着假诺在数据库中选拔 uniqueidentifier 键,大概会带来两上边的消极影响:存款和储蓄空间外加;索引时间比较慢。

总结来讲, GUID 的独特之处带给的便利远超出其短处带来的影响,随着诸如 WebService 等体系互联与组合技术的继续不停前进,其唯一标记的特点使得其利用越发广,在您的应用程序中也应构思采纳它了。

本文由威尼斯www.9778.com发布于数据库,转载请注明出处:全球唯一标识GUID

关键词:

sql 删除重复记录未有高低关系时,管理重复值

sql 删除重复记录没有大小关系时,处理重复值 删除重复数据sql语句 方法一 -- -- (roy)生成 假设有重复的字段为name,a...

详细>>

正解SQLSEVER 2005 sql排序

下面利用sql函数存储过程来实现的一种大小排序的方法 今天在论坛上看到一个问题,如下: SET ANSI_NULLS ON GO SET QUOT...

详细>>

SQL SERVER 2005中如何获取日期(一个月的最后一日、一年的第一日

mssql server 常用日期函数 那是总括5个月第一天的SQL 脚本:   SELECT DATEADD(mm, DATEDIFF(mm,0,getdate(State of Qatar卡塔尔(قطر‎...

详细>>

Node.js与Sails~Model数据模型

写在前面 本来这个东西,我是不想在这里总结的,今天有初学者的朋友问我了,那就不得不说说了,你肯定也踩过这...

详细>>