MySQL - UUID



MySQL UUID 函数

MySQL 的 UUID() 函数用于根据 RFC 4122 生成“通用唯一标识符”(UUID)。即使在不同的服务器上生成,UUID 也被设计为全局唯一。UUID 使用当前时间戳、服务器的唯一标识符和随机数的组合生成。

UUID 格式

UUID 值表示为 UTF-8 字符串,是一个 128 位数字。UUID 值的格式为十六进制数,由五个用连字符分隔的段组成。

UUID 值的通用格式为:aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee,其中每个段代表一个十六进制值。

生成 UUID

以下是使用 MySQL 中的 UUID() 函数生成 UUID 的基本示例:

SELECT UUID();

输出

它将显示如下所示的通用唯一标识符:

UUID()
55f7685d-e99c-11ed-adfc-88a4c2bbd1f9

生成多个 UUID

您可以在单个查询中生成多个 UUID,每个 UUID 都将有所不同,如下所示:

SELECT UUID() AS ID1, UUID() AS ID2;

输出

输出将显示两个不同的 UUID,差异通常在第一段:

ID1 ID2
78c3fb43-e99c-11ed-adfc-88a4c2bbd1f9 78c3fb4f-e99c-11ed-adfc-88a4c2bbd1f9

数据库表中的 UUID

您可以将 UUID 用作数据库表中的唯一标识符。以下是创建具有 UUID 列的表并插入数据的示例:

在这里,我们首先使用以下查询创建一个名为“ORDERS”的表,其中 ORDER_ID 列的类型为 VARCHAR:

CREATE TABLE ORDERS(
   ID int auto_increment primary key,
   NAME varchar(40),
   PRODUCT varchar(40),
   ORDER_ID varchar(100)
);

现在,我们使用 UUID() 函数为 ORDER_ID 列生成唯一值,并将数据插入 ORDERS 表中:

INSERT INTO ORDERS (NAME, PRODUCT, ORDER_ID) VALUES ("Varun", "Headphones", UUID());
INSERT INTO ORDERS (NAME, PRODUCT, ORDER_ID) VALUES ("Priya", "Mouse", UUID());
INSERT INTO ORDERS (NAME, PRODUCT, ORDER_ID) VALUES ("Nikhil", "Monitor", UUID());
INSERT INTO ORDERS (NAME, PRODUCT, ORDER_ID) VALUES ("Sarah", "Keyboard", UUID());
INSERT INTO ORDERS (NAME, PRODUCT, ORDER_ID) VALUES ("Vaidhya", "Printer", UUID());

以下是获得的 ORDERS 表:

ID 名称 产品 订单ID
1 Varun 耳机 a45a9632-e99d-11ed-adfc-88a4c2bbd1f9
2 Priya 鼠标 a45b03a3-e99d-11ed-adfc-88a4c2bbd1f9
3 Nikhil 显示器 a45b49cc-e99d-11ed-adfc-88a4c2bbd1f9
4 Sarah 键盘 a45b8d3f-e99d-11ed-adfc-88a4c2bbd1f9
5 Vaidhya 打印机 a4b003d0-e99d-11ed-adfc-88a4c2bbd1f9

修改 UUID

您可以修改 UUID 而不丢失其唯一性。例如,您可以使用 REPLACE() 和 TO_BASE64() 等函数删除连字符或将其转换为 base64 表示法。

示例

在这里,我们使用以下查询更新 ID = 1 的记录的 UUID 值:

UPDATE ORDERS SET ORDER_ID = UUID() WHERE ID=1;

输出

以下是上述代码的输出:

Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

验证

为了验证修改后的 UUID 值,我们可以使用以下 SELECT 查询:

SELECT * FROM ORDERS;

从下面的输出中我们可以看到,每次执行 UUID() 函数时,我们都会得到不同的 UUID 值:

ID 名称 产品 订单ID
1 Varun 耳机 38f4d94a-e99d-11ed-adfc-88a4c2bbd1f9
2 Priya 鼠标 a45b03a3-e99d-11ed-adfc-88a4c2bbd1f9
3 Nikhil 显示器 a45b49cc-e99d-11ed-adfc-88a4c2bbd1f9
4 Sarah 键盘 a45b8d3f-e99d-11ed-adfc-88a4c2bbd1f9
5 Vaidhya 打印机 a4b003d0-e99d-11ed-adfc-88a4c2bbd1f9

示例

假设先前已创建表,让我们使用以下所示的 **REPLACE()** 函数从 ID = 2 的行的 UUID 中删除连字符:

UPDATE ORDERS 
SET ORDER_ID = REPLACE(UUID(), '-', '')
WHERE ID = 2;

输出

上述代码的输出如下:

Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

验证

为了验证修改后的 UUID 值,我们可以使用以下 SELECT 查询:

SELECT * FROM ORDERS;

从下面的输出中我们可以看到,行 = 2 的 UUID 已修改,但其“唯一”部分未受影响:

ID 名称 产品 订单ID
1 Varun 耳机 a45a9632-e99d-11ed-adfc-88a4c2bbd1f9
2 Priya 鼠标 069b0ca-7e99e11ed-adfc-88a4c2bbd1f9
3 Nikhil 显示器 a45b49cc-e99d-11ed-adfc-88a4c2bbd1f9
4 Sarah 键盘 a45b8d3f-e99d-11ed-adfc-88a4c2bbd1f9
5 Vaidhya 打印机 a4b003d0-e99d-11ed-adfc-88a4c2bbd1f9

示例

在下面的查询中,我们使用 **TO_BASE64()** 函数将 ID = 4 的 UUID 转换为 base64 表示法:

UPDATE ORDERS 
SET ORDER_ID = TO_BASE64(UNHEX(REPLACE(UUID(),'-',''))) 
WHERE ID=4;

输出

产生的结果如下:

Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

验证

让我们使用以下 SELECT 查询验证修改后的 UUID 值:

SELECT * FROM ORDERS;

产生的输出如下所示:

ID 名称 产品 订单ID
1 Varun 耳机 a45a9632-e99d-11ed-adfc-88a4c2bbd1f9
2 Priya 鼠标 069b0ca7-e99e11ed-adfc-88a4c2bbd1f9
3 Nikhil 显示器 a45b49cc-e99d-11ed-adfc-88a4c2bbd1f9
4 Sarah 键盘 ObRYA+mfEe2t/IikwrvR+Q==
5 Vaidhya 打印机 a4b003d0-e99d-11ed-adfc-88a4c2bbd1f9
广告