温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

UUID在数据库中的版本控制

发布时间:2026-07-01 17:44:01 来源:亿速云 阅读:95 作者:小樊 栏目:数据库

数据库层面谈 UUID 的“版本控制”,其实有两层含义,要分清楚才不会混淆:


一、UUID 本身的“版本”(最常见含义)

UUID 是一种标准化的格式(RFC 4122 / RFC 9562),它有多个“版本号”,不同版本生成方式不同。

常见 UUID 版本

版本 名称 说明 数据库使用情况
UUID v1 时间 + MAC 基于时间戳和机器 MAC 有顺序,但泄露 MAC,不安全
UUID v2 DCE 很少用 几乎不用
UUID v3 MD5 + 命名空间 可重复(同一输入) 少用于主键
UUID v4 随机 完全随机 最常见
UUID v5 SHA-1 + 命名空间 可重复 少用于主键
UUID v6 / v7 / v8 新版本(RFC 9562) 时间排序 + 随机 数据库友好

数据库中的典型选择

MySQL / PostgreSQL

  • 不推荐 UUID v4 作为主键(性能原因)
  • 推荐 UUID v7(有序)
  • 新系统建议:
    id UUID DEFAULT uuid_generate_v7() PRIMARY KEY
    

✅ PostgreSQL / MySQL 8+

支持 UUID v7(或插件):

  • 有序
  • 插入 B+Tree 不产生大量页分裂
  • 索引性能接近自增 ID

二、UUID 在数据库中的“版本控制”(数据层面的含义)

这指的是:用 UUID 做版本控制 / 乐观锁 / 行版本管理,而不是 UUID 本身的版本。

1️⃣ UUID 作为行版本号(乐观锁)

UPDATE user
SET name = 'Tom',
    version = gen_random_uuid()
WHERE id = 1
  AND version = '旧UUID';

✅ 适合:

  • 并发更新
  • 避免 ABA 问题
  • 不需要数字递增

✅ 比时间戳安全


2️⃣ UUID 作为数据快照 / 历史表

id (业务主键)
record_id (UUID)  ← 表示同一份数据
version_uuid       ← 版本标识

常用于:

  • 审计表
  • 数据历史
  • 事件溯源(Event Sourcing)

3️⃣ UUID 在分布式系统中的“版本含义”

在分布式系统中,UUID 常被当作:

  • 不可变标识
  • 版本标识
  • 幂等键

例如:

INSERT INTO order (id, payload)
VALUES ('uuid-v7', '{}')
ON CONFLICT (id) DO NOTHING;

三、UUID 在数据库中的性能与版本选择建议

❌ 不推荐

  • UUID v4 作为 聚簇主键
    • 随机写入 → B+Tree 分裂
  • 字符串存 UUID(36 字节)

✅ 推荐

  • UUID v7(有序)
  • 使用 UUID 类型,而不是 VARCHAR
  • 如果必须兼容老系统:
    • UUID v4 + 非聚簇索引

四、总结一句话

UUID 的“版本控制”通常指:

  • UUID 本身的标准版本(v4 / v7)
  • 或在数据库中用 UUID 实现数据版本、乐观锁、历史追踪

如果你愿意,我可以:

  • 给你 MySQL / PostgreSQL 的 UUID v7 示例
  • 对比 UUID vs Snowflake vs 自增 ID
  • 结合 **ORM(如 Hibernate / TypeORM)**讲实战方案
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI