可以在mysql中复制guid

时间:2013-10-04 06:14:35

标签: mysql database guid

我在mysql的一个表中创建了一个名为guid varchar(36)的字段。在此字段中,我使用UUID()插入值。我希望这个领域与众不同。所以,我的问题是mysql的UUID()可以返回重复值吗?

感谢

3 个答案:

答案 0 :(得分:0)

引自http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_uuid

UUID被设计为在空间和时间上全球唯一的数字。对UUID()的两次调用预计会生成两个不同的值,即使这些调用是在两个彼此没有连接的独立计算机上执行的。

但它正在返回 128 字符

答案 1 :(得分:0)

来自文档UUID被设计为在空间和时间上全球唯一的数字。由于查询是在执行之前编译的,因此您在同一时刻调用UUID()两次。因此,您不能指望它在同一查询中返回两个唯一值,因为两个值都使用相同的时间戳。这对我来说听起来像是预期的行为。

在这里查看(我也会从这里复制答案)

MySql UUID duplication BUG

答案 2 :(得分:0)

假设算法在接近中途的任何地方,它看起来像是,简短的回答是 no

这个数字来自一个单调增加的时间戳计数器(用外行的术语表示计数器总是前进并且永远不会重复)并防止在同一时刻生成两个值,具体取决于架构,空间分量(MAC地址)或随机分量。

来自the documentation

  

UUID被设计为在空间和时间上全球唯一的数字。对UUID()的两次调用预计会生成两个不同的值,即使这些调用是在两个彼此未连接的独立计算机上执行的。


答案很长,是技术上可以两次生成相同的UUID,但被陨石撞击的概率通常更大。如果数字是完全随机生成的(注意MySQL只有一部分数字可能是随机的,其他部分来自时间戳计数器),维基百科puts it nicely

  

如果地球上每个人拥有6亿UUID,则一次重复的概率约为50%。

这当然有资格获得“足够好”。如果您真的非常担心,只需在列上打一个UNIQUE约束,以获得额外的舒适感。