MySql教程
MySql用户管理
MySQL数据库
MySql表格和视图
MySQL查询
MySQL索引
MySQL子句
MySQL授权
MySql控制流
MySQL条件
MySQL连接
MySQL键
MySQL触发器
MySQL聚合函数
MySQL常用
MySQL正则表达式
MySql差异性

MySQL UUID

UUID是RFC 4122(这是一个通用唯一标识符URN命名空间)指定的通用唯一标识符,并且具有128位长值。它的设计方式是根据时空生成全球唯一的数字。如果我们连续调用两个UUID,我们将获得两个不同的值,即使它们是在两个未连接的独立设备上执行的。
注意: 尽管UUID()始终生成唯一值,但它们不可猜测或不可预测。这意味着它总是返回一个随机数。

UUID的结构

MySQL 返回一个128位长的值。它以人类可读的格式表示为 五个十六进制数字的UTF8字符串,格式如下:
aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
前三个数字是时间戳格式的一部分,例如低,中和高。在这里,高位包含UUID版本号。 第四个数字负责在时间戳值失去单调性时保留时间唯一性。 第五个数字代表IEEE 802节点号,它表示空间唯一性。如果字母不可用,它将替换不能保证空间唯一性的随机数。
以下是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

MySQL UUID与AUTO_INCREMENT PRIMARY键

MySQL中的UUID是AUTO_INCREMENT PRIMARY的很好的替代品键。以下是UUID相对于AUTO_INCREMENT主键的优点:

优点

以下是将UUID用作主键的优点:
MySQL中的UUID值在表,数据库和服务器之间唯一。它使我们能够跨服务器合并来自分布式数据库的行。 UUID值不提供有关我们数据的信息,这意味着很难猜测。因此,在URL中使用是安全的。 UUID值可以脱机生成,这意味着我们可以在任何地方生成它,而无需与数据库服务器交换信息。 它还简化了复制(应用程序中的逻辑)。例如,如果我们想将数据插入父表和子表中,则必须首先将数据插入父表中,获取生成的ID,然后将记录填充到子表中。使用UUID,我们可以生成父表的PRIMARY KEY值,并将行同时插入两个表中。

缺点

除了优点之外,以下是使用UUID作为主键的缺点:
如果我们将UUID(16字节)值存储在数据库中,则它占用的空间/存储空间将大于整数(4字节)或大整数(8字节)。 这使调试更加困难。例如,我们可以想象表达式WHERE id ='185e6dfd-1cc8-11eb-9a2c-107d1a24f935'而不是WHERE id = 5、 由于无序值及其大小,它还可能导致性能问题

MySQL UUID解决方案

我们可以使用以下给出的功能克服MySQL中的这些问题。这些功能使我们能够以紧凑格式(BINARY)存储UUID值,并以人类可读格式(VARCHAR)显示它们。函数的名称为:
UUID_TO_BIN BIN_TO_UUID IS_UUID
注意: 注意,这些功能仅在MySQL 8.0或更高版本中可用。
UUID_TO_BIN()函数用于将UUID值从人类可读格式转换为紧凑格式,以将其存储在数据库中。
BIN_TO_UUID()函数用于将UUID从紧凑格式转换为人类可读格式以进行显示。
IS_UUID()函数用于验证UUID的字符串格式。当参数有效时返回1,对于无效参数返回0。如果参数为NULL,它将返回NULL。

MySQL UUID示例

让我们在示例的帮助下了解如何使用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语句以验证插入的记录。
MySQL UUID
最后,我们将使用BIN_TO_UUID()函数从UUID列查询数据,该函数将二进制格式转换为人类可读格式。请参阅以下语句:
mysql> SELECT BIN_TO_UUID(emp_id) AS ID, name FROM employee;
我们将得到如下输出:
MySQL UUID

MySQL UUID与UUID(short)

UUID()和UUID(short)在MySQL中都是不同的函数。下面的比较表中讨论了它们之间的基本区别:
UUID UUID(short)
UUID是RFC 4122指定的通用唯一标识符,它的128位长值表示为包含五个十六进制数字的UTF8字符串。 此函数将产生一个短通用唯一标识符(64位无符号整数),该整数与UUID()函数生成的字符串格式的128位标识符不同。
它将产生一个符合16字节version1 UUID的值。版本1 UUID是服务器ID的按位组合,当前时间戳,一些字节和实用程序位。 它的返回值包含服务器ID的按位聚合,一个相当静态的时间分量以及一个顺序增加的24位整数。
在UUID中,服务器ID为6个字节长,这使得空间是唯一的。 在UUID(简短)中,服务器ID仅是一个字节。这就是为什么它失去空间唯一性的原因。

昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4