3

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

4

3 回答 3

4

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

来自维基百科

于 2012-06-21T10:41:11.823 回答
3

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

您可以在此处查看更多信息。


避免重复 guid(如果您仍然需要)的一种可能解决方案是使用UNIQUE 约束

于 2012-06-21T10:42:17.653 回答
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

于 2012-06-21T10:44:26.730 回答