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
廣告