Guids保证是独一无二的吗?

时间:2012-06-21 10:37:35

标签: sql-server-2008 guid

我在我的数据库中使用Guids作为主键,并且想知道是否有可能生成重复的Guid。 Guids是否保证是唯一的?

3 个答案:

答案 0 :(得分:4)

虽然不保证每个生成的GUID都是唯一的,但是唯一密钥的总数(2 ^ 128或3.4×10 ^ 38)是如此之大,以至于两次生成相同数字的概率非常小。例如,考虑可观察的宇宙,其中包含大约5×10 ^ 22个星;然后每个星星都有6.8×10 ^ 15个通用唯一的GUID。

来自Wikipedia

答案 1 :(得分:3)

  

虽然不保证每个生成的GUID都是唯一的,但总数   唯一键的数量(2128或3.4×1038)是如此之大   两次生成相同数字的概率非常小。

您可以查看有关here的更多信息。


一个可能的解决方案,以避免重复的guid(如果你还想要一个)是使用UNIQUE constraint

答案 2 :(得分:1)

如果使用NEWSEQUENTIALID()生成一个,则保证它们是唯一的。不过,微软声称[1]它将是独一无二的,而且

  

世界上没有其他计算机会生成该GUID的副本   值。

维基百科声明[2]

  

Microsoft在Transact-SQL语言中添加了一个函数   NEWSEQUENTIALID(),[8]生成保证的GUID   价值增加,但可能从较低的数字开始(仍然保证   唯一的)当服务器重新启动时

简而言之:在实践中,它们将是独一无二的。

[1] http://msdn.microsoft.com/en-us/library/ms190215(SQL.105).aspx
[2] http://en.wikipedia.org/wiki/Globally_unique_identifier#Sequential_algorithms