C#Guid作为数据库身份复制的可能性?

时间:2015-03-24 08:24:31

标签: c# sql-server primary-key guid

我想知道Guid重复。我正在创建一个Guid来将数据库表保存为实体主键。

Account account = new Account(Guid.NewGuid());

但我很困惑。这是否会导致数据库表上的重复,因为我手动创建主键并将其插入数据库。

数据库引擎不会生成ID。保存了无数的记录后,是否有可能重复?

3 个答案:

答案 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 )。这个数字太大,以至于随机生成两次相同数字的概率可以忽略不计

From Wiki

答案 2 :(得分:0)

为了您的信息,SQL SERVER生成Guid 将列ID的数据类型设为 uniqueidentifier ,然后在属性栏中,转到 RowGuid ,然后将其更改为是。
附:
确保您的ID是主键。