当由MySQL生成的UUID()
不唯一时会发生什么?如果这是针对主键的列,那么MySQL会出错,还是会尝试生成另一个UUID,直到找到真正唯一的一个UUID?MySQL UUID()何时不唯一?
回答
那么,如果你打电话UUID()
两次,并得到相同的结果,最有问题的东西会是“东西坏了”(tm)。据我所知,它应该是独一无二的,应该是永远的。
将不会有“再生”代码可用:该功能旨在甚至跨计算机创建唯一的密钥,所以它如何才能知道其结果不是唯一的?
从 http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_uuid甲UUID被设计为一个数字,是在空间和时间 全局唯一。对UUID()的两个调用预计会生成两个不同的 值,即使这些调用是在两个不相互连接的单独计算机 上执行的。
也许你的意思是别的?例如,如果您使用UUID()
来生成应该是唯一的东西(如主键或唯一字段等),并且您以前添加了相同的编号(例如,您只需要调用UUID()
一次,但插入了两次),那么当将非唯一内容添加到应该是唯一的地方时,您将获得默认错误。你不会得到一个新的。
一些阅读材料有关的唯一性:
的手册。读它,以及它如何使用各种零件生成
uuid
:http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_uuid检查该手册的实际定义链接(但是这是一个相当读,所以你可能会跳过这一项):https://www2.opengroup.org/ogsys/jsp/publications/PublicationDetails.jsp?catalogno=c706
一些容易理解的dubplicates的概率在这里指标:http://en.wikipedia.org/wiki/Universally_unique_identifier
没有对MySQL的网站(论坛等),也有的谈,如何使用它作为主键,但我在工作和短期的时间,你需要自己搜索:)
MySQL UUID()确定性地基于MAC地址,版本和时间戳。如果单个服务器上的2个线程使用相同的时间戳(完全相同的微秒)调用,则预期会得到相同的结果。这对单线程是不可能的,因为这些调用在4Ghz处理器上会分开几微秒。
我忘了提及:你会得到一个重复的主键错误。 – dusc2don 2013-06-28 19:33:44
- 1. 模型中的Django Auto UUID不唯一
- 2. UUID是唯一的吗? iphone
- 3. 计算UUID唯一的概率
- 4. UUID为唯一的整数ID?
- 5. 使用UUID的唯一文件名
- 6. 休眠UUID代和MySQL UUID功能UUID()
- 7. MySQL - 不唯一表/别名
- 8. 基于时间的UUID在云环境中可能不唯一吗?
- 9. 当用户卸载并重新安装时,设备UUID不唯一
- 10. 如何在nodeJs中每次调用函数时都生成唯一的UUID?
- 11. 如何在swift中生成特定于设备的唯一uuid
- 12. 如何唯一标识iOS设备而不是使用UUID和UDID
- 13. MySQL和UUID问题
- 14. MySQL数据库唯一字段(不是表唯一)
- 15. Mysql的暂时抑制唯一索引
- 16. MySQL查询选择唯一时间戳
- 17. MySQL加入唯一
- 18. mysql的唯一ID
- 19. MySQL“非唯一ID”
- 20. MySQL - 唯一外键
- 21. 来自同一台机器上多个进程的唯一UUID
- 22. MySQL - 使一对值唯一
- 23. MySQL的UNION不返回唯一列
- 24. 删除重复行mysql不唯一
- 25. MySQL不报告索引唯一性?
- 26. Mysql的唯一键不起作用
- 27. MySQL不是唯一的表/别名
- 28. 多在mysql中唯一不支持NULL
- 29. 随着时间的推移MySQL不同(唯一)值
- 30. 当数值为NULL时,MySQL唯一索引不适用
嗯,但不是UUID的“大多是独一无二的低碰撞几率”,而不是保证独特?我想这就是我不确定的部分 - 有没有可能UUID()可能不会生成唯一的ID? – ina 2012-03-14 01:10:54
变化是一个棘手的词汇,但将它们用作主键并不是闻所未闻的,如果这就是你所要求的。我会发布一些阅读材料,但你可以很容易地找到一些。 – Nanne 2012-03-14 08:12:28
你会推荐使用UUID作为主键吗? – ina 2012-03-14 11:07:38