我在 mysql 的一个表中创建了一个名为 guid varchar(36( 的字段。在这个字段中,我使用 UUID(( 插入值。我希望这个字段是唯一的。所以,我的问题是mysql的UUID((可以返回重复值吗?
谢谢
自 http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_uuid
UUID 被设计为在空间和时间上全局唯一的数字。对 UUID(( 的两次调用应生成两个不同的值,即使这些调用是在两台未相互连接的单独计算机上执行的。
但它返回 128 个字符
来自文档 UUID 被设计为在空间和时间上全局唯一的数字。由于查询是在执行之前编译的,因此您将在同一时刻调用 UUID(( 两次。因此,您不能期望它在同一查询中返回两个唯一值,因为这两个值将使用相同的时间戳。这对我来说听起来像是预期的行为。
在这里检查(我也会从这里复制答案(
MySql UUID 重复错误
假设算法接近体面的一半,看起来是这样,简短的答案是否定的。
该数字是从单调递增的时间戳计数器生成的(通俗地说,这意味着计数器始终向前并且永远不会重复自身(,并防止在同一时刻生成两个值,具体取决于体系结构,空间组件(MAC 地址(或随机组件。
从文档中:
UUID 被设计为在空间和时间上全局唯一的数字。对 UUID(( 的两次调用应生成两个不同的值,即使这些调用是在两台未相互连接的单独计算机上执行的。
长答案是,是的,技术上可以产生两次相同的UUID,但被陨石撞击的可能性通常更大。如果数字是完全随机生成的(注意在MySQL上,只有一部分数字可能是随机的,其他部分来自时间戳计数器(,维基百科说得很好:
如果地球上每个人都拥有 6 亿个 UUID,那么一个重复的概率约为 50%。
这当然有资格"足够好"。如果您真的很担心,只需在柱子上拍一个UNIQUE
约束以获得额外的舒适感。