如何批量生成 UUID
← 返回博客
如何批量生成 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
立即尝试在线工具,无需安装,免费使用。
打开工具 →
立即免费使用相关工具
免费使用 →