全局唯一标识符(GUID,Globally Unique Identifier)是一种由特定算法生成的二进制长度为128位的数字标识符。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。GUID 的总数达到了2^128(3.4×10^38)个,所以随机生成两个相同GUID的可能性非常非常非常小,但并不为0,用于生成GUID的算法通常都加入了非随机的参数(如时间),以保证这种重复的情况不会发生。GUID字符串形式格式是“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中x表示0-9或a-z中的任意字符,例如5ff62d65-492f-4b30-81b4-d0c23a4560dd就是一GUID字符串。
C#生成GUID(默认小写):
//生成新guid Guid guid1 = Guid.NewGuid(); Console.WriteLine(guid1.ToString()); //利用guid字符串构造出guid Guid guid2 = new Guid(guid1.ToString()); Console.WriteLine(guid2.ToString()); Console.ReadLine();
Sql Server生成GUID(默认大写):
select NEWID() //对应的数据库表字段类型是uniqueidentifier
相比于Int或Long类型的主键标识而言,用GUID作为记录的唯一主键标识不容易记忆、没有规律、没有顺序,存储长度较大、索引时间较慢。不过从整体来看,用GUID作为对象的唯一标识还是优于传统的Int或Long类型的自增主键。首先,GUID值在任何一个有限的时空尺度内几乎可以认为用不完、不重复;其次,新增记录时可以提前获取作为主键的GUID值,减少一次数据库交互操作,而如果以传统的Int或Long类型的字段作为自增主键,那么新增一条记录前必须执行一次数据库插入操作以获取这个最新的自增主键;再次,用GUID作为记录的唯一标识具有数据可移植性,可以认为GUID值是跨表、跨数据库、跨系统的,而传统的Int或Long类型的自增主键则只能限定在某一特定系统、某一特定数据库的某一特定表中。