什么是 UUID?
UUID(Universally Unique Identifier,通用唯一标识符)是一个 128 位的标识符,格式如下:
550e8400-e29b-41d4-a716-446655440000
UUID 由 32 个十六进制字符和 4 个连字符组成,共 36 个字符。它的设计目标是在不依赖中央授权机构的情况下,生成在全球范围内唯一的标识符。理论上,随机生成 10 亿个 UUID 也极难出现重复。
UUID 的主要用途
- 数据库主键:替代自增 ID,在分布式系统中避免主键冲突
- API 资源标识:REST API 中用 UUID 标识用户、订单、文件等资源
- 会话 Token:生成不可预测的会话 ID,提高安全性
- 文件命名:给上传文件分配唯一名称,避免覆盖冲突
- 事务追踪:微服务中用 UUID 追踪跨服务的请求链路
UUID v4 vs UUID v7:有什么区别?
| 特性 | UUID v4 | UUID v7 |
| 生成方式 | 完全随机 | 时间戳 + 随机 |
| 可排序 | 否 | 是(按生成时间) |
| 数据库性能 | 一般(随机插入导致索引碎片) | 好(有序插入,减少 B-tree 碎片) |
| 包含时间信息 | 否 | 是(可提取生成时间) |
| 适用场景 | 简单唯一标识 | 需要排序的数据库主键 |
建议:新项目优先选择 UUID v7,数据库写入性能更好;老项目兼容 v4 即可。
如何免费生成 UUID
使用 tool.tl 的 UUID 生成器:
- 访问 tool.tl/uuid-generator
- 选择版本:v4(随机)或 v7(有序)
- 设置生成数量(支持批量生成)
- 点击生成,一键复制结果
所有 UUID 在浏览器本地生成,符合 RFC 4122 规范,可直接用于生产环境。
代码中生成 UUID
实际开发中,通常用语言库生成 UUID:
# Python
import uuid
print(uuid.uuid4()) # v4
# JavaScript / Node.js
import { v4 as uuidv4, v7 as uuidv7 } from 'uuid';
console.log(uuidv4());
console.log(uuidv7());
# Go
import "github.com/google/uuid"
id := uuid.New()
# SQL (PostgreSQL)
SELECT gen_random_uuid(); -- v4
常见问题
UUID 真的全局唯一吗?
理论上,UUID v4 碰撞的概率极低——生成 10 亿个 UUID 才有约 50% 的概率出现一次碰撞。在实际应用中,UUID 可以视为全局唯一。
UUID 和 GUID 有什么区别?
GUID(Globally Unique Identifier)是微软对 UUID 规范的实现,本质上是同一个东西。在 Windows/SQL Server 生态中叫 GUID,在其他系统中叫 UUID。
UUID 作为数据库主键有什么缺点?
UUID v4 是随机的,作为主键会导致数据库 B-tree 索引碎片化,写入性能下降。解决方案是使用 UUID v7(有序)或 ULID。UUID v7 同时具备唯一性和有序性,是目前最推荐的数据库主键方案。