我在我的数据库中使用Guids作为主键,并且想知道是否有可能生成重复的Guid。 Guids是否保证是唯一的?
答案 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