MySQL UUID函数的详解 mysql
MySQL中能够有二类用于生成惟一值性质的工具:UUID()函数和自增序列,那么两者有何区别呢?咱们就此对比下各自的特性及异同点:sql
l 均可以实现生成惟一值的功能;服务器
l UUID是能够生成时间、空间上都独一无二的值;自增序列只能生成基于表内的惟函数
一值,且须要搭配使其为惟一的主键或惟一索引;工具
l 实现方式不同,UUID是随机+规则组合而成的,而自增序列是控制一个值逐步增加的;ui
l UUID产生的是字符串类型值,固定长度为:36个字符,而自增序列产生的是整数类型值,长度由字段定义属性决定;编码
接下来,详细讲解下UUID()函数产生的值:.net
oot@localhost : (none) 06:09:40> SELECT UUID(),UUID(),LENGTH(UUID()),CHAR_LENGTH(UUID())\G索引
*************************** 1. row ***************************字符串
UUID(): de7ee638-4322-11e0-85ab-842b2b4a7e75
UUID(): de7ee642-4322-11e0-85ab-842b2b4a7e75
LENGTH(UUID()): 36
CHAR_LENGTH(UUID()): 36
1 row in set (0.00 sec)
从上面的执行结果部分的信息看:
l 同一个SQL语句中,多处调用UUID()函数获得的值不相同;
l 获得的随机值由5个部分组成,且分隔符位为:中划线;
l 屡次调用或执行获得的后2组值相同,若把mysqld服务器关闭,从新启动以后,会发现第四组的组与未重启前的值发生变化,而后一直不变化,只要从新启动mysqld服务就会发生变化。另外,对于同一台机器,第五组值始终不会发生变化;
l 字符个数为:36,占字节数为:36(注:系统默认字符集编码:utf8);
针对UUID产生的值组成部分,做以下解说:
l 前三组值是时间戳换算过来的;
l 第四组值是暂时性保持时间戳的惟一性。例如,使用夏令时;
l 第五组值是一个IEE 802的节点标识值,它是空间上惟一的。若后者不可用,则用一个随机数字替换。假如主机没有网卡,或者咱们不知道如何在某系统下得到机器地址,则空间惟一性就不能获得保证,即便这杨,出现重复值的机率仍是很是小的。
********************************************************************
后续添加的:
在mysql中,可使用uuid 来生成主键,可是用mysql的uuid()函数 ,生成的uuid是36位的,其中包含32个字符以及4个分隔符(-),每每这个分隔符对咱们来讲是没有用的,可使用mysql自带的replace函数去掉分隔符
replace(uuid(),'-','') ---->将uuid()中的‘-’,去掉,即替换成空串;
此外 upper(replace(uuid(),'-',''))用于将字符转换为大写