热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

比较好奇:sqlserver是如何保证Guid的唯一性的?

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

那sqlserver是通过什么机制保证guid的唯一性,全球的sqlserver服务器以及其他不是sqlserver的guid生成器是如何保证guid不会有任何两个重复?

9 个解决方案

#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


用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字

#6


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

#7


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

#8


没太大的意义,用这个做主键,还不如用自增ID做主键。

#9


学习学习,顶

推荐阅读
author-avatar
完结那份友谊吧_586
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有