数据库迁移时出现 UUID 冲突(通常是主键或唯一标识冲突),一般可以从“事前避免”和“事后处理”两个维度来解决。下面按常见场景给你一套思路。
UUID 冲突常见原因:
UUID v4(随机)UUID v7(时间有序,推荐新系统)SELECT uuid, COUNT(*)
FROM table
GROUP BY uuid
HAVING COUNT(*) > 1;
例如:
a-xxxx-xxxxb-xxxx-xxxx
或使用 UUID v5(基于命名空间)前提:UUID 不是对外暴露的业务标识
UPDATE table
SET id = gen_random_uuid()
WHERE id IN (
SELECT id FROM table
GROUP BY id
HAVING COUNT(*) > 1
);
⚠️ 注意:
适合:
表结构:
id UUID PRIMARY KEY
legacy_id UUID
查询时兼容旧值。
例如:
user_01_xxxx-xxxx
user_02_xxxx-xxxx
ALTER TABLE t DISABLE TRIGGER ALL;
-- 修复数据
ALTER TABLE t ENABLE TRIGGER ALL;
⚠️ 仅限维护窗口
@GeneratedValue 别混用✅ 新系统统一用 UUID v7
✅ 迁移脚本自动生成,不人工指定
✅ 迁移前后做 唯一性校验
✅ 外键关系提前梳理
如果你愿意,可以告诉我:
我可以给你具体可执行的 SQL / 脚本。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。