求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
要资料
 
 

mysql教程
MySQL快速学习入门
MySQL是什么
MySQL安装
MySQL示例数据库
MySQL导入示例数据库
MySQL基础教程
MySQL查询数据
MySQL WHERE语句
MySQL插入数据
MySQL更新表数据
MySQL删除表数据
MySQL创建与删除数据库
MySQL创建表
MySQL修改表结构
MySQL重命名表
MySQL数据类型
高级部分
MySQL技巧
MySQL存储过程
MySQL视图
MySQL触发器
MySQL管理
MySQL全文搜索
MySQL函数
应用程序连接
MySQL+Node.js连接和操作
Python+MySQL连接和操作
 
 

MySQL UUID和主键
641 次浏览
1次  

本教程将向您介绍MySQL UUID,并演示如何将其用作表的主键(PK),并讨论将其用作主键的优缺点。

MySQL UUID简介

UUID代表通用唯一标识符。UUID是基于”RFC 4122“通用唯一标识符(UUID)URN命名空间”)定义的。

UUID被设计为在空间和时间全球独一无二的数字。 预期两个UUID值是不同的,即使它们在两个独立的服务器上生成。

在MySQL中,UUID值是一个128位的数字,表示为以下格式的十五进制数字的utf8字符串:

aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee

要生成UUID值,请使用UUID()函数,如下所示:

UUID()

UUID()函数返回符合RFC 4122中描述的UUID版本1的UUID值。

例如,以下语句使用UUID()函数来生成UUID值:

mysql> SELECT UUID();
+--------------------------------------+
| UUID() |
+--------------------------------------+
| 9d6212cf-72fc-11e7-bdf0-f0def1e6646c |
+--------------------------------------+
1 row in set

MySQL UUID与自动递增INT作为主键

优点

使用UUID作为主键具有以下优点:

UUID值在表,数据库甚至在服务器上都是唯一的,允许您从不同数据库合并行或跨服务器分发数据库。

UUID值不会公开有关数据的信息,因此它们在URL中使用更安全。例如,如果ID为10的客户通过URL: http://www.example.com/customers/10/ 访问他的帐户,那么很容易猜到有一个客户11,12等,这可能是攻击的目标。

可以在避免往返数据库服务器的任何地方生成UUID值。它也简化了应用程序中的逻辑。 例如,要将数据插入到父表和子表中,必须首先插入父表,获取生成的id,然后将数据插入到子表中。通过使用UUID,可以生成父表的主键值,并在事务中同时在父表和子表中插入行。

缺点

除了优势之外,UUID值也有一些缺点:

存储UUID值(16字节)比整数(4字节)或甚至大整数(8字节)占用更多的存储空间。

调试似乎更加困难,想像一下WHERE id ='9d6212cf-72fc-11e7-bdf0-f0def1e6646c'和WHERE id = 10那个舒服一点?

使用UUID值可能会导致性能问题,因为它们的大小和没有被排序。

MySQL UUID解决方案

在MySQL中,可以以紧凑格式(BINARY)存储UUID值,并通过以下功能显示人机可读格式(VARCHAR):

UUID_TO_BIN

BIN_TO_UUID

IS_UUID

请注意,UUID_TO_BIN(),BIN_TO_UUID()和IS_UUID()函数仅在MySQL 8.0或更高版本中可用。

UUID_TO_BIN()函数将UUID从人类可读格式(VARCHAR)转换成用于存储的紧凑格式(BINARY)格式,并且BIN_TO_UUID()函数将UUID从紧凑格式(BINARY)转换为人类可读格式(VARCHAR)。

如果参数是有效的字符串格式UUID,IS_UUID()函数将返回1。 如果参数不是有效的字符串格式UUID,则IS_UUID函数返回0,如果参数为NULL,则IS_UUID()函数返回NULL。

以下是MySQL中有效的字符串格式UUID:

aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
aaaaaaaabbbbccccddddeeeeeeeeeeee
{aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee}

MySQL UUID示例

我们来看一下使用UUID作为主键的例子。

以下语句创建一个名为customers的新表:

USE testdb;
CREATE TABLE customers (
id BINARY(16) PRIMARY KEY,
name VARCHAR(255)
);

要将UUID值插入到id列中,可以使用UUID()和UUID_TO_BIN()函数,如下所示:

INSERT INTO customers(id, name)
VALUES(UUID_TO_BIN(UUID()),'John Doe'),
(UUID_TO_BIN(UUID()),'Will Minsu'),
(UUID_TO_BIN(UUID()),'Mary Jane');

要从UUID列查询数据,可以使用BIN_TO_UUID()函数将二进制格式转换为可读取的格式:

SELECT
BIN_TO_UUID(id) id,
name
FROM
customers;

在本教程中,您已经了解了MySQL UUID以及如何将其用于主键列。


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



641 次浏览
1次
 捐助