2012-03-13 30 views
2

当由MySQL生成的UUID()不唯一时会发生什么?如果这是针对主键的列,那么MySQL会出错,还是会尝试生成另一个UUID,直到找到真正唯一的一个UUID?MySQL UUID()何时不唯一?

回答

5

那么,如果你打电话UUID()两次,并得到相同的结果,最有问题的东西会是“东西坏了”(tm)。据我所知,它应该是独一无二的,应该是永远的。

将不会有“再生”代码可用:该功能旨在甚至跨计算机创建唯一的密钥,所以它如何才能知道其结果不是唯一的?

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

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

也许你的意思是别的?例如,如果您使用UUID()来生成应该是唯一的东西(如主键或唯一字段等),并且您以前添加了相同的编号(例如,您只需要调用UUID()一次,但插入了两次),那么当将非唯一内容添加到应该是唯一的地方时,您将获得默认错误。你不会得到一个新的。

一些阅读材料有关的唯一性:

  1. 的手册。读它,以及它如何使用各种零件生成uuidhttp://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_uuid

  2. 检查该手册的实际定义链接(但是这是一个相当读,所以你可能会跳过这一项):https://www2.opengroup.org/ogsys/jsp/publications/PublicationDetails.jsp?catalogno=c706

  3. 一些容易理解的dubplicates的概率在这里指标:http://en.wikipedia.org/wiki/Universally_unique_identifier

  4. 没有对MySQL的网站(论坛等),也有的谈,如何使用它作为主键,但我在工作和短期的时间,你需要自己搜索:)

+0

嗯,但不是UUID的“大多是独一无二的低碰撞几率”,而不是保证独特?我想这就是我不确定的部分 - 有没有可能UUID()可能不会生成唯一的ID? – ina 2012-03-14 01:10:54

+0

变化是一个棘手的词汇,但将它们用作主键并不是闻所未闻的,如果这就是你所要求的。我会发布一些阅读材料,但你可以很容易地找到一些。 – Nanne 2012-03-14 08:12:28

+0

你会推荐使用UUID作为主键吗? – ina 2012-03-14 11:07:38

2

MySQL UUID()确定性地基于MAC地址,版本和时间戳。如果单个服务器上的2个线程使用相同的时间戳(完全相同的微秒)调用,则预期会得到相同的结果。这对单线程是不可能的,因为这些调用在4Ghz处理器上会分开几微秒。

+0

我忘了提及:你会得到一个重复的主键错误。 – dusc2don 2013-06-28 19:33:44