4

我有一个主键类型为 Guid 的表。在我的 MVC 应用程序中,我想向该表添加一条记录。我知道Guid.newGuid()这会创建一个新的 Guid。这很好用,但我有一个担心。如何确保创建的 Guid 是唯一的(数据库中尚不存在)?有没有办法通过比较已经存在的值来生成它,以确保新的 guid 在数据库记录中是唯一的?

4

3 回答 3

4

guid 生成技术的全部目的是它不需要。该算法将生成一个全局唯一值,即使它无法访问所有其他先前生成的 GUID。

特别是,该算法只生成一个大随机数。GUID 中有太多的数据位,以至于其中两个具有相同值的几率非常小。小到可以真正忽略它们。

有关更详细的分析,请参阅Eric Lippert 关于该主题的博客。(特别是第三部分。)

请注意,因此,使用 GUID 作为唯一标识符将在数据库中占用比仅使用数字标识符更多的空间。任何体面的数据库都会有一个特殊的列类型,专门设计为它将填充的唯一标识符;这样的列将能够确保唯一性,同时使用比 GUID 少得多的空间。

于 2013-04-24T15:22:49.837 回答
2

产生重复的可能性非常低。但是,您可以UNIQUE对数据库表实施约束。

于 2013-04-24T15:22:23.933 回答
1

但是,新的 GUId 与数据库中存在的任何人匹配的可能性很小。

但是,如果您仍然想确保只创建一个 proc 或其他可以为 GUID 提供 true 或 false 的东西。如果它返回 true,则再次生成并重复此过程,直到没有获得唯一的 GUID。

于 2013-04-24T15:23:37.557 回答