SQL UUID介绍及应用

593 阅读4分钟

SQL UUID

SQL UUID的定义

UUID(Universally Unique Identifiers)是大多数编程语言中非常流行的一种数据类型。顾名思义,UUID实际上是整个宇宙中的唯一值。也就是说,它们不仅对数据库服务器是唯一的,而且在不同的服务器之间也是唯一的。UUID是一个由五个十六进制数字组成的字符串,包括128位,符合RFC 4122的定义。UUID值可以是服务器时间、时钟序列、主网络的MAC地址等的组合,也可以是完全随机或伪随机的,取决于UUID版本。在本专题中,我们将学习SQL UUID。

UUID数据类型最流行的用法是作为主键。它们比传统的自动递增的整数型主键更安全,因为它们是唯一的,难以猜测和复制。而且,它们是全局唯一的,因此在跨数据库迁移时不会产生问题。不会有任何冲突。然而,UUIDs也有一定的弊端。例如,我们可以从自动递增类型的主键中查看插入的顺序,但是UUIDs则不可能。另外,UUIDs是128位的,与传统的主键相比,需要更多的时间。另一个缺点是,由于UUID的大小和复杂性,使用UUID进行调试可能是一个问题。

在这篇文章中,我们将讨论关于UUIDs的一切,从如何创建它们到如何在数据库表中使用它们。让我们从了解编写UUID生成函数的语法开始。

SQL UUID的语法和参数

一个通用的UUID值看起来如下。

Aaaaaaaa-bbbbb-cccc-dddd-eeeeeeeee

在SQL中写一个UUID函数的基本语法如下。

SELECT UUID_generate_version4();

OR

SELECT UUID_generate_version1();

这个函数的语法在不同的数据库服务器中可能有所不同,但基本原理是一样的。这种特殊的语法对应于postgreSQL。然而,在其他数据库中,它可能是UUID_GENERATE()、NEWID()或UUID()。

在数据库表中使用UUID数据类型的基本语法如下:

CREATE TABLE tablename (
Column_name1 UUID CONSTRAINT,
column_name2 data type CONSTRAINT,
.
.
.
);

上述语法中使用的参数与CREATE TABLE语句相似。唯一的区别是使用UUID而不是任何其他数据类型。

SQL UUID的例子

为了使用UUID值,我们必须在数据库服务器中加载UUID生成函数,例如uuid_generate_v4(),因为它在数据库服务器中并没有默认加载。下面是一个CREATE EXTENSION语句来执行这个任务。

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

例子 #1

用SQL查询来说明生成版本1类型的UUID值的情况。

SELECT UUID_generate_v1();

输出

SQL UUID Example 1

例子#2

说明生成版本4类型的UUID值的SQL查询。

SELECT UUID_generate_v4();

输出

SQL UUID Example 2

例子#3

不使用UUID生成函数来生成UUID的SQL查询。

在上面提到的查询中,我们创建了一个系统生成的UUID。我们也可以通过使用clock_timestamp()和random()函数的组合来创建一个自定义UUID字符串,如下图所示。

SELECT uuid_in (md5(clock_timestamp()::text || random()::text)::cstring);

输出

SQL UUID Example 3

例子 #4

用SQL查询来说明UUID值作为主键的用法?

接下来,为了说明UUID数据类型的一些实际用法,让我们创建一个名为 "user_details "的假表。这个表包含版本4中UUID类型的用户ID。这个表的CREATE TABLE语句如下。

CREATE TABLE user_details (
user_id UUID DEFAULT uuid_generate_v4(),
user_name VARCHAR(225) NOT NULL,
city VARCHAR(50),
PRIMARY KEY (user_id)
);

user_details表已经被成功创建。每次有新的记录插入到表中时,UUID值都会默认使用uuid_generate_v4()函数生成。

创建了表之后,让我们在其中插入几条记录。我们可以使用下面的INSERT语句来插入记录。

INSERT INTO user_details(
user_name, city)
VALUES ('Mohit Kumar','New Delhi'),
('Rahul Raj','Mumbai'),
('Samuel Maxson','New york'),
('Ariel Summer', 'Santa Monica'),
('Harmonie Grainger', 'London');

5条记录已经被成功插入。我们不需要为user_id字段插入任何值,因为它将被默认生成,UUID_generate_v4()函数将确保为每条记录插入一个唯一的值。

让我们检查一下user_id列是否已经以期望的方式被填充。

SELECT * FROM user_details;

输出

Example 4

使用SELECT语句获取的结果显示,由5个十六进制值组成的user_id已经成功生成。所有这些都是唯一的,当然也是难以记忆和复制的。因此,UUIDs被广泛地用作主键。

总结

在这篇文章中,我们了解了SQL中的UUID数据类型。它是由5个十六进制值组成的独特集合。UUIDs用于创建主键,以唯一地识别一条记录。它不仅在数据库服务器内是唯一的,而且是全球唯一的。由于它是随机或伪随机生成的,所以很难复制。因此,它提供了非常需要的安全性和唯一性。