暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PG模式 中 UUID 的使用方法

原创 jack 2025-03-27
557

1. 启用 UUID 扩展

首先需要启用 uuid-ossp 扩展:

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

2. 生成 UUID 的函数

uuid_generate_v1() - 基于时间和 MAC 地址

SELECT uuid_generate_v1();

使用 uuid_generate_v4() - 完全随机生成

SELECT uuid_generate_v4();

使用 uuid_generate_v3()uuid_generate_v5() - 基于命名空间和名称的哈希

SELECT uuid_generate_v3(uuid_ns_url(), 'https://example.com');
SELECT uuid_generate_v5(uuid_ns_url(), 'https://example.com');

3. 创建带有 UUID 列的表

CREATE TABLE example_table (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    name VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

4. 插入数据

自动生成 UUID

INSERT INTO example_table (name) VALUES ('Test Name');

手动指定 UUID

INSERT INTO example_table (id, name) 
VALUES ('a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11', 'Manual UUID');

5. 查询和比较 UUID

-- 查询特定 UUID

SELECT * FROM example_table WHERE id = 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11';
-- 比较 UUID
SELECT * FROM example_table WHERE id > 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11';

6. 在应用程序中使用

Java 示例

import java.util.UUID;
// 生成 UUID
UUID uuid = UUID.randomUUID();
// 在 SQL 中使用
PreparedStatement stmt = connection.prepareStatement(
    "INSERT INTO example_table (id, name) VALUES (?, ?)");
stmt.setObject(1, uuid);
stmt.setString(2, "Java Generated");
stmt.executeUpdate();

7. 注意事项

  1. 确保 uuid-ossp 扩展已安装

  2. UUID 占用 16 字节存储空间

  3. 随机 UUID (v4) 有极小的碰撞概率

  4. 作为主键时,索引效率可能不如自增整数,但适合分布式系统;

  5. uuid类型是大小写敏感的,通常使用小写字母;

  6. uuid类型的数据长度固定为36个字符(包括连字符);

最后修改时间:2025-03-27 15:22:48
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论