都说Guid到太阳熄灭的那一天也不会重复。那sqlserver是通过什么机制保证guid的唯一性,全球的sqlserver服务器以及其他不是sqlserver的guid生成器是如何保证guid不会有任何两个重复?

解决方案 »

  1.   

    GUID好像是根据机器上网卡的MAC地址再加上一定的算法生成的唯一的序列。
    因全世界所有网卡的MAC地址都是唯一的,且在自己的机器上再加上时间等
    因素生成。GUID肯定是唯一的。 
    在一个合理的时间范围内,不会重复。
    他的算法,至少有两个主要的参数,一个是时间,另外一个就是你机器的软、硬件信息,用来定位你使用的电脑。
    同一台电脑不可能在同一时间运行两个GUID的算法,因此,你可以认为他是唯一的。 
      

  2.   

    1.         一个GUID为一个128位的整数(16字节),在使用唯一标识符的情况下,你可以在所有计算机和网络之间使用这一整数。    
      2.         GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。例如:337c7f2b-7a34-4f50-9141-bab9e6478cc8 即为有效的 GUID 值。    
      3.         世界上(Koffer注:应该是地球上)的任何两台计算机都不会生成重复的 GUID 值。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。 
      4.         在 Windows 平台上,GUID 应用非常广泛:注册表、类及接口标识、数据库、甚至自动生成的机器名、目录名等。 
      

  3.   

    在SQL Server中使用32全球唯一码(GUID)可用newid来获取。insert into [User](id,name,sex,password)values(newid(),'xp','1','1234')其中id数据列要求是36位char型或Uniqueidentifier 型可以包含对 GUID 数据类型的引用,该数据类型用于存储全局唯一标识符。在更新查询和插入源查询中可以调用 newid( ) 函数,以生成新的 GUID 存储在数据库内。创建选择查询时,允许对 GUID 类型列执行的唯一操作是基于等于(= 和 <>)的比较。
      

  4.   

    你可以试下 
    select NEWID()
    ------------------------------------
    129AAAC0-8505-4273-885D-82E8A4C8C6F7
    ------------------------------------
    D12B7DD4-489F-47C9-8942-1E543FCF3AFA
      

  5.   

    设计目的就是为了不重复,楼主还想怎样?
    计算机网卡的MAC地址本身就不会重复,除非买到盗版网卡。
      

  6.   

    还有一问,大家经常用Guid作表的主键吗? 我感觉用Guid作主键很不方便,
    主要是排序,分页方面,还有客户端在使用时,无法表示出有意义的内容。