我想知道Guid重复。我正在创建一个Guid
来将数据库表保存为实体主键。
Account account = new Account(Guid.NewGuid());
但我很困惑。这是否会导致数据库表上的重复,因为我手动创建主键并将其插入数据库。
数据库引擎不会生成ID。保存了无数的记录后,是否有可能重复?
答案 0 :(得分:4)
不是。
多少"不是真的"取决于GUID类型,以及您对概率的理解。
A"真实" GUID,版本1,该值保证是唯一的。它是通过组合网卡的MAC地址(唯一的,除非您手动更改)和时间戳形成的。
伪随机GUID,版本4,保证不是唯一的,但无论如何都不太可能发生冲突。您有122位可以使用,2^122
是非常大的数字。就像,真的大。使用Guid.NewGuid()
很好 - 虽然应该注意用于生成GUID的随机数是不加密随机。
当然,GUIDv4的不同实现将具有明显不同的熵。如果您只使用Random
生成数字,那么您最多不会接近122位数。因此,不要认为您可以编写自己的代码来生成GUID,大多数此类尝试并没有比Random.Next()
更独特的东西 - 到目前为止还不足以支持数据库中的主键。
请注意,GUID通常用于复制等场景,它们完全建立在两个生成的唯一GUID之上。
答案 1 :(得分:0)
唯一此类GUID的总数为2 122 (约 5.3×10 36 )。这个数字太大,以至于随机生成两次相同数字的概率可以忽略不计
答案 2 :(得分:0)
为了您的信息,SQL SERVER生成Guid
将列ID的数据类型设为 uniqueidentifier ,然后在属性栏中,转到 RowGuid ,然后将其更改为是。
附:
确保您的ID是主键。