Mysql 简明教程

MySQL - UUID

The MySQL UUID function

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

UUID Format

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

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

Generating a UUID

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

SELECT UUID();

Output

它会显示一个通用唯一标识符,如下所示 -

Generating Multiple UUIDs

您可以在单个查询中生成多个 UUID,并且每个 UUID 都会有所不同,如下所示 -

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

Output

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

UUIDs in a Database Table

您可以在数据库表中使用 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 表如下 -

Modifying UUIDs

您可以在不丢失唯一性的情况下修改 UUID。例如,您可以使用 REPLACE() 和 TO_BASE64() 等函数删除连字符或将其转换为 base64 编码。

Example

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

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

Output

以下是上面代码的输出: -

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

Verification

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

SELECT * FROM ORDERS;

正如我们在下面的输出中看到的,每当我们执行 UUD() 函数时,我们得到一个不同的 UUID 值:

Example

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

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

Output

上述代码的输出如下:

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

Verification

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

SELECT * FROM ORDERS;

正如我们在下面的输出中看到的,行 = 2 的 UUID 被修改了,而没有破坏其“唯一”部分:

Example

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

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

Output

产生的结果如下 −

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

Verification

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

SELECT * FROM ORDERS;

产生的输出如下: