0

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

谢谢

4

3 回答 3

0

假设该算法接近一半,看起来是这样,简短的回答是否定的。

该数字是从一个单调递增的时间戳计数器生成的(用外行的话来说,这意味着计数器总是向前移动并且从不复制自身),并防止在完全相同的时刻生成两个值,具体取决于架构,或者是空间组件( MAC 地址)或随机组件。

文档中

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


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

如果地球上每个人都拥有 6 亿个 UUID,那么出现重复的概率约为 50%。

这当然符合“足够好”的条件。如果您真的很担心,只需UNIQUE在柱子上加一个约束以获得额外的舒适感。

于 2013-10-04T06:20:27.350 回答
0

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

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

但它返回128个字符

于 2013-10-04T06:18:45.443 回答
0

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

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

MySql UUID重复BUG

于 2013-10-04T06:19:11.507 回答