MySQL的uuid这个函数。简要介绍一下。

用法

简单看到,这个值,每次执行都是不同的。

生成规则

第1 2 3 段是与时间有关的。

time_low、time_mid、time_high_and_version转成16进制后分别对应第1 2 3段。这个时间是从1582-10-15 00:00:00.00到当前时间的100ns值。(实际上系统只能取到精确us,再乘以10)。所以你短时间连续执行的话,比较可能只有第一个值在改,实际上1 2 3都可能会改变。

第4段是你启动这个MySQL后第一次执行select uuid()时的随机数,每次重启会改变。

第5段是mac值转过来的,同一个机器多实例的一般相同。如果mac值获取不到,则是一个随机值。

所以这个值可以认为是每次执行都不相同。并且不同实例之间也只有极微小概率重复。

Uuid_short

与uuid返回固定长度字符串不同, uuid_short的返回值是一个unsigned long long类型。MySQL启动后第一次执行的值是通过server_id << 56 + server_start_time << 24来初始化。server_start_time单位是秒。 之后每次执行都加1。

由于每次加1都会加全局mutex锁,因此多线程安全,可以当作sequence来用,只是初始值有点大。

作为Sequence

MySQL没有Oracle那样的sequence,在不是很精确的情况下,可以考虑上面提到的uuid_short。有一些不足:

1、初始值太大,无法重设

2、存在一个问题是每次重启后第一次执行的值不是重启前的那个值+1

3、而且如果重启在1s内完成,可能出现不单调递增(虽然这个可能性微乎其微)。

最新文章

  1. 挖掘微信Web版通信的全过程 [转]
  2. DOCTYPE的重要性
  3. python之rabbitMQ篇
  4. cdoj 1324 卿学姐与公主 线段树裸题
  5. [NOIP 2014复习]第三章:动态规划——NOIP历届真题回想
  6. QT4项目升级到QT5遇到的问题和解决方法
  7. 安卓使用Dialog创建普通对话框
  8. 幻世(OurDream)2D图形引擎使用教程8——处理操作输入(2)
  9. 大数据和Hadoop生态圈
  10. oracle 内连接,外连接
  11. iOS - Block底层解析
  12. C++ stack
  13. nginx配置文件中的location理解
  14. 【python】升级pip后报错解决pkg_resources.DistributionNotFound: The &#39;pip==7.1.0&#39; distribution was not found and is required by the application
  15. Nginx详解十三:Nginx场景实践篇之防盗链
  16. JS对象与Dom对象与jQuery对象之间的区别
  17. Linux的nmon监控结果分析文件中网络分析NET
  18. jackson的自动检测机制
  19. 14.纯 CSS 创作一种侧立图书的特效
  20. HashMap的最大容量为什么是2的30次方?

热门文章

  1. 关于content-type
  2. GIT 常用方法
  3. rel= &quot;noopener&quot;
  4. UNP学习笔记1——基本TCP套接字编程
  5. Unity 点击屏幕发射射线 代码
  6. node——request和response的常用对象
  7. elk集群配置配置文件中节点数配多少
  8. BZOJ 1176/2683 Mokia (三维偏序CDQ+树状数组)
  9. BZOJ 2118 墨墨的等式 (同余最短路)
  10. NOIP2013 华容道 (棋盘建图+spfa最短路)