MariaDB SYS_GUID() 函数的基础用法与实例

MariaDB SYS_GUID() 函数用来生成一个符合 UUID(Universally Unique Identifier) 规范的36位字符串。

发布于

MariaDB SYS_GUID() 函数用来生成一个符合 UUID(Universally Unique Identifier) 规范的 36 位字符串。UUID 是一种唯一标识符,通常用于为各种资源分配唯一的标识号。该函数可以在需要生成全局唯一标识符的场景中使用,比如生成订单号、会话 ID 等。

语法

MariaDB SYS_GUID() 函数的语法非常简单:

SYS_GUID()

该函数不需要任何参数,直接调用即可。它返回一个格式为 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 的 36 位字符串,这种格式符合标准 UUID 格式。

实例

生成一个 UUID

SELECT SYS_GUID();

以下是该语句的输出:

+----------------------------------+
| SYS_GUID()                       |
+----------------------------------+
| ef56d408ea4b11eea78428c5d2301aff |
+----------------------------------+

本示例直接调用 SYS_GUID() 函数,得到一个新生成的 UUID 字符串。每次执行该语句,都会返回不同的 UUID。

为新建表的主键生成 UUID

DROP TABLE IF EXISTS users;
CREATE TABLE users (
    id CHAR(36) PRIMARY KEY,
    name VARCHAR(50),
    email VARCHAR(100)
);

INSERT INTO users (id, name, email)
VALUES (SYS_GUID(), 'John Doe', '[email protected]');

SELECT * FROM users;

以下是该语句的输出:

+----------------------------------+----------+----------------------+
| id                               | name     | email                |
+----------------------------------+----------+----------------------+
| feaa23adea4b11eea78428c5d2301aff | John Doe | [email protected] |
+----------------------------------+----------+----------------------+

本示例创建一个 users 表,其主键 id 字段类型为 CHAR(36)。在插入新用户时,使用 SYS_GUID() 为主键生成一个 UUID。

生成多个 UUID

SELECT SYS_GUID() AS uuid1, SYS_GUID() AS uuid2, SYS_GUID() AS uuid3;

以下是该语句的输出:

+----------------------------------+----------------------------------+----------------------------------+
| uuid1                            | uuid2                            | uuid3                            |
+----------------------------------+----------------------------------+----------------------------------+
| 0fb00de7ea4c11eea78428c5d2301aff | 0fb00df4ea4c11eea78428c5d2301aff | 0fb00df9ea4c11eea78428c5d2301aff |
+----------------------------------+----------------------------------+----------------------------------+

本示例一次生成多个不同的 UUID,可用于批量插入测试数据等场景。

生成格式化的 UUID

SELECT UPPER(REPLACE(SYS_GUID(),'-','')) AS compact_uuid;

以下是该语句的输出:

+----------------------------------+
| compact_uuid                     |
+----------------------------------+
| 1AE2320CEA4C11EEA78428C5D2301AFF |
+----------------------------------+

本示例使用 UPPER() 函数将 UUID 转换为大写,并使用 REPLACE() 函数将 UUID 中的 - 字符移除,从而生成一个紧凑格式的 UUID。

生成伪随机 UUID

SELECT LPAD(CONV(FLOOR(RAND()*1000000000000000000), 16, 36), 32, '0') AS random_uuid;

以下是该语句的输出:

+----------------------------------+
| random_uuid                      |
+----------------------------------+
| 00000000000000000003W5E11264SGSF |
+----------------------------------+

本示例利用 RAND()CONV()LPAD() 函数生成一个类似 UUID 的 32 位十六进制字符串。这样生成的字符串不符合标准 UUID 规范,但可以用作伪随机 UUID。

相关函数

以下是几个与 MariaDB SYS_GUID() 相关的几个函数:

  • MariaDB UUID() 函数也可以生成一个 UUID 字符串,但格式与 SYS_GUID() 略有不同。
  • MariaDB RAND() 函数可以生成一个 0 到 1 之间的伪随机数。
  • MariaDB CONV() 函数用于进行进制转换。
  • MariaDB LPAD() 函数用于通过在字符串左侧填充指定字符达到指定长度。

结论

MariaDB SYS_GUID() 函数是生成符合标准 UUID 规范的唯一标识符的便捷方式。结合主键约束,可以有效防止出现重复主键的情况。除了用作主键外,UUID 还可以用于生成会话 ID、文件名等需要全局唯一标识符的场景。同时,我们也可以利用其他字符串函数对 UUID 进行格式化处理,以满足特殊的需求。总的来说,掌握 SYS_GUID() 函数的用法,可以更好地规避潜在的数据冲突风险,并提高开发效率。