2012-06-21 30 views

回答

3

虽然每个生成的GUID不能保证是唯一的,总 数唯一密钥(2128或3.4×1038)的是如此之大,产生相同数目的概率 两次非常小。

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


一个可能的解决方案避免重复的GUID(如果你仍然想一个)是使用UNIQUE constraint

4

虽然每个生成的GUID不能保证是唯一的,但唯一键的总数(2^128或3.4×10^38)非常大,以致相同数字两次产生的概率非常小。例如,考虑可观测的宇宙,其中包含约5×10^22星;每颗恒星可以拥有6.8×10^15个通用唯一GUID。从。

1

如果您使用NEWSEQUENTIALID()生成一个,它们将保证是唯一的。尽管如此,微软声称[1],这将是唯一的,并且

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

维基状态[2]

微软加入)称为 NEWSEQUENTIALID(在Transact-SQL语言,[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

+3

**不,他们不是!**你仍然有重复......每个GUID由'NEWSEQUENTIALID()产生的机会非常渺茫'有保证在该计算机上是唯一的** **只有..... –

+0

@marc_s我认为这个问题是在单个服务器的上下文中提出的。尽管如此,我仍然不会说在另一台计算机上发生重复ID的机会,而且它与您的使用情况相关的数量远远少于“超薄”。这就是为什么我说他们在实践中会是独一无二的,我不敢反对使用GUID,因为他们99,99999%保证是唯一的而不是100%。 :) – Rob

相关问题