← 返回博客

如何批量生成 UUID

2026-04-12 · 5 分钟阅读

← 返回博客

如何批量生成 UUID

· 5 分钟阅读

批量生成 UUID 的常见场景

需要批量生成 UUID 的典型场景:数据库种子数据初始化(为大量记录预先准备唯一 ID,而不是让数据库在插入时生成);测试数据生成(为自动化测试准备固定的 UUID 集合,使测试具有确定性);数据迁移(为从旧系统迁移的记录批量分配新的 UUID);API 密钥或令牌的候选池(批量预生成备用的唯一标识符);文档或资产的批量命名(为一批上传文件分配唯一名称)。

命令行批量生成

# Linux/macOS:生成 100 个 UUID
for i in $(seq 1 100); do uuidgen; done

# macOS 默认大写,转小写
for i in $(seq 1 100); do uuidgen | tr '[:upper:]' '[:lower:]'; done

# 保存到文件
for i in $(seq 1 1000); do uuidgen; done > uuids.txt

# Python 一行命令批量生成
python3 -c "import uuid; [print(uuid.uuid4()) for _ in range(100)]"

# 生成 CSV 格式(带索引)
python3 -c "
import uuid
print('index,uuid')
for i in range(1, 101):
    print(f'{i},{uuid.uuid4()}')
" > uuids.csv

# Node.js 批量生成
node -e "
const {randomUUID} = require('crypto');
for(let i=0;i randomUUID());
}

// 生成 JSON 文件(适合作为测试数据)
function generateTestData(count) {
  const data = Array.from({ length: count }, (_, i) => ({
    id: randomUUID(),
    name: `Test Item ${i + 1}`,
    createdAt: new Date().toISOString(),
  }));
  return JSON.stringify(data, null, 2);
}

// 保存到文件
fs.writeFileSync('test-data.json', generateTestData(100));
console.log('Generated 100 test records with UUIDs');

// 生成 CSV 格式
function generateCSV(count) {
  const header = 'id,name,status';
  const rows = Array.from({ length: count }, (_, i) =>
    `${randomUUID()},Item ${i + 1},active`
  );
  return [header, ...rows].join('\n');
}

fs.writeFileSync('test-data.csv', generateCSV(500));

数据库层面批量生成

-- PostgreSQL:批量生成 UUID 记录
INSERT INTO products (id, name, category)
SELECT gen_random_uuid(), 'Product ' || gs, 'default'
FROM generate_series(1, 1000) AS gs;

-- MySQL 8.0+:批量插入
DELIMITER //
CREATE PROCEDURE bulk_insert_uuids(IN count INT)
BEGIN
  DECLARE i INT DEFAULT 0;
  WHILE i < count DO
    INSERT INTO items (id, name) VALUES (UUID(), CONCAT('Item ', i));
    SET i = i + 1;
  END WHILE;
END //
DELIMITER ;
CALL bulk_insert_uuids(1000);

-- SQL Server:批量生成
INSERT INTO orders (id, status)
SELECT NEWID(), 'pending'
FROM (
  SELECT TOP 1000 ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS n
  FROM sys.objects CROSS JOIN sys.objects
) AS nums;

批量生成时的注意事项

批量生成 UUID 时需要注意:每个 UUID 都是独立生成的,相互之间没有关联,批量生成不会增加碰撞风险;不要使用循环调用 Math.random() 等非加密安全随机数生成器;如果批量生成的 UUID 要用于数据库,考虑使用批量插入(而非逐条插入)以提高性能;对于极大批量(超过百万),考虑分批处理并写入文件,避免内存溢出;如果需要可重现的测试数据(每次运行生成相同 UUID),使用 UUID v5 基于索引或名称派生,而非随机 v4。

验证批量生成结果的唯一性

import uuid

# 生成并验证唯一性(用于演示,生产中无需这样做)
def bulk_generate_verified(count):
    uuids = set()
    while len(uuids) < count:
        new_uuid = str(uuid.uuid4())
        uuids.add(new_uuid)
    return list(uuids)

# 统计 set 大小等于 list 大小说明无重复
uuids = [str(uuid.uuid4()) for _ in range(100000)]
unique_count = len(set(uuids))
print(f"Generated: {len(uuids)}, Unique: {unique_count}")
# 几乎必然输出:Generated: 100000, Unique: 100000

立即尝试在线工具,无需安装,免费使用。

打开工具 →

立即免费使用相关工具

免费使用 →