Guids是否保证唯一性?

3

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

3个回答

4
每个生成的GUID并不能保证是唯一的,但是唯一键的总数(2 ^ 128或3.4×10^38)非常大,因此生成相同数字的概率非常小。例如,考虑可观测宇宙,它包含约5×10^22颗星星;然后每颗星星都可以拥有6.8×10^15个通用唯一标识符(GUID)。
来自维基百科

3

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

您可以在这里查看更多信息。


如果您仍希望使用重复的guid(全局唯一标识符),可能的解决方案是使用 UNIQUE约束


1

如果您使用NEWSEQUENTIALID()生成GUID,则它们保证是唯一的。Microsoft声称[1]它将是唯一的,

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

维基百科[2]指出:

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

简而言之:实际上,它们将是唯一的。

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


3
不是!你仍然有很小的重复机会......由 NEWSEQUENTIALID() 生成的每个 GUID 只保证在该台电脑上是唯一的。 - marc_s
@marc_s 我假设这个问题是在单个服务器的上下文中提出的。尽管如此,我不会认为在另一台计算机上发生重复ID的可能性,并且它与您的用例相关性显着小于“微小”。这就是为什么我说它们在实践中将是唯一的,而我不敢建议不使用GUID,因为它们99.99999%保证是唯一的,而不是100%。 :) - Rob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接