我有一个表,其中主键是Guid类型。在我的MVC应用程序中,我想在此表中添加一条记录。我知道创建新Guid的Guid.newGuid()
。这很好但我有一个问题。如何确保创建的Guid是唯一的(数据库中尚不存在)?有没有办法通过比较已有的值来生成它,以确保新的guid在数据库记录中是唯一的?
答案 0 :(得分:3)
指导生成技术的全部目的是它不需要。即使算法无法访问所有其他先前生成的GUID,该算法也会生成全局唯一值。
特别是,算法只生成一个大的随机数。 GUID中有如此多的数据位,其中两个具有相同值的几率非常小。小到足以让他们真正被忽视。
有关更详细的分析,请参阅Eric Lippert's blog on the subject。 (特别是part three。)
请注意,因此,使用GUID作为唯一标识符将占用数据库中相当多的空间,然后只使用数字标识符。任何体面的数据库都有一个特殊的列类型,专门设计为一个唯一的标识符,它将填充;这样的列将能够确保唯一性,同时使用比GUID少得多的空间。
答案 1 :(得分:2)
生成重复的可能性非常低。但是,您将在数据库表上强制执行UNIQUE
约束。
答案 2 :(得分:1)
然而,新GUId与数据库中的任何人匹配的可能性很小。
但是如果你仍然想要确保只创建一个proc或者为GUID赋予真或假的东西。如果它返回true,则再次生成并重复此过程,直到找不到唯一的GUID。