MySQL UUID()何时不唯一?

ina*_*ina 2 mysql uuid uniqueidentifier unique-key

UUID()MySQL生成的不是唯一的时候会发生什么?如果这是一个作为主键的列,MySQL是否会出错,或者是否尝试生成另一个UUID,直到找到真正唯一的UUID?

Nan*_*nne 5

好吧,如果你打UUID()两次并获得相同的结果,最有问题的是"东西被打破"(tm).它应该是独一无二的,据我所知,应该总是这样.

没有"再生"代码可用:该功能旨在创建甚至跨计算机的唯一键,所以它怎么能知道它的结果不是唯一的?

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

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

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

一些关于独特性的阅读材料:

  1. 手册.阅读它,以及它如何使用各种部分来生成uuid.:http://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. 关于复制概率的一些更容易理解的指标:http://en.wikipedia.org/wiki/Universally_unique_identifier

  4. 在mysql网站(论坛等)上也有一些关于使用它作为主键的讨论,但由于我在工作并且时间紧迫,你需要自己搜索:)