UUID(Universally Unique Identifier)是按照RFC 4122规范指定的一种通用唯一标识符,它是一个128位长的值。它的设计方式能够根据空间和时间生成全球唯一的数字。如果我们连续调用两次UUID函数,我们将得到两个不同的值,即使它们是在两个没有连接的设备上执行的。
注意:尽管UUID()总是生成唯一的值,但它们是不可猜测或可预测的。这意味着它总是返回一个随机数。
在MySQL中,UUID返回一个128位长的值。它以UTF8字符串的形式表示,由下面的格式组成: 五个十六进制数
aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
以下是MySQL中UUID值的有效字符串格式,它是一个 由32位十六进制格式和四个连字符(-)组成的排列:
a2720191-1cc6-11eb-9a2c-107d1a24f935
185e6dfd-1cc8-11eb-9a2c-107d1a24f935
我们可以使用以下函数在MySQL中生成UUID值:
mysql> SELECT UUID();
以上函数返回与RFC 4122中描述的UUID版本1一致的UUID值。成功执行上述语句后,将生成如下UUID值:
MySQL中的UUID是AUTO_INCREMENT PRIMARY KEY的一个很好的替代方案。以下是UUID优于AUTO_INCREMENT PRIMARY KEY的优点:
使用UUID作为主键的优点如下:
除了优点,使用UUID作为主键还有以下缺点:
我们可以通过使用以下给定的函数在MySQL中解决这些问题。这些函数允许我们将UUID值以紧凑格式(BINARY)存储,并以可读的格式(VARCHAR)显示。这些函数的名称如下:
UUID_TO_BIN() 函数用于将UUID值从可读的格式转换为紧凑格式,以便存储在数据库中。
BIN_TO_UUID() 函数用于将UUID从紧凑格式转换为可读格式以进行显示。
IS_UUID() 函数用于验证UUID的字符串格式。如果参数有效则返回1,对于无效参数返回0。如果参数为NULL,则返回NULL。
让我们通过一个例子来了解如何使用UUID。首先,我们将使用以下语句创建一个名为 employee 的新表:
CREATE TABLE employee (
emp_id BINARY(16) PRIMARY KEY,
name VARCHAR(255)
);
下一步,我们需要将值插入表中。此外,如果我们想要将UUID值添加到 emp_id列 中,我们必须使用UUID()和UUID_TO_BIN()函数,如下所示:
INSERT INTO employee (emp_id, name)
VALUES (UUID_TO_BIN(UUID()),'John Doe'),
(UUID_TO_BIN(UUID()),'Johnny Dope'),
(UUID_TO_BIN(UUID()),'Jason Gillespie');
现在,执行SELECT语句来验证插入的记录。
最后,我们将使用BIN_TO_UUID()函数来查询一个UUID列的数据,该函数将二进制格式转换为可读格式。查看下面的语句:
mysql> SELECT BIN_TO_UUID(emp_id) AS ID, name FROM employee;
我们将得到以下输出:
UUID()和UUID(short)都是MySQL中不同的函数。它们之间的基本区别在下面的比较表中讨论:
UUID | UUID(short) |
---|---|
UUID是由RFC 4122指定的通用唯一标识符,是由五个十六进制数字表示的UTF8字符串,其长度为128位。 | 此函数生成一个短的通用唯一标识符,作为64位无符号整数,与UUID()函数生成的字符串格式的128位标识符不同。 |
它生成一个符合16字节版本1 UUID标准的值。版本1 UUID是服务器ID的位累加和、当前时间戳、几个字节和实用位的组合。 | 返回值包含服务器ID的位累加和、相当静态的时间组件和逐渐增加的24位整数。 |
在UUID中,服务器ID的长度为6字节,使得空间唯一。 | 在UUID(简短版)中,服务器ID只有一个字节,所以失去了空间的唯一性。 |
本文链接:http://so.lmcjl.com/news/15783/