如何用单条SQL快速翻倍MySQL测试数据表行数?
解决MySQL表数据翻倍且避免唯一索引冲突的SQL方案
原语句无法执行的核心原因是user_id列带有唯一索引,直接复制原表的user_id会触发唯一约束冲突。以下是针对不同user_id类型的修改方案:
数值型user_id
如果user_id是整数类型,可通过叠加原表最大user_id的值生成新的唯一标识:
INSERT INTO mytable (user_id, org_id, type) SELECT (SELECT MAX(user_id) FROM mytable) + user_id, org_id, type FROM mytable;
- 子查询
(SELECT MAX(user_id) FROM mytable)获取当前表最大user_id,与原行user_id相加后,确保新值不会与原有值重复 - 自增
id列无需在插入列表中指定,MySQL会自动为新行分配唯一自增ID
字符串型user_id
如果user_id是字符串类型,可通过拼接唯一后缀生成不重复的新值:
INSERT INTO mytable (user_id, org_id, type) SELECT CONCAT(user_id, '_', UUID_SHORT()), org_id, type FROM mytable;
UUID_SHORT()生成短唯一数值,与原user_id拼接后保证唯一性- 若需要更短标识,也可用
UNIX_TIMESTAMP()替代,但高并发场景下需注意重复风险
通用注意事项
- 执行前建议备份表数据,避免操作失误引发问题
- 若需多次翻倍数据,可重复执行修改后的SQL,每次都会基于当前表最大
user_id生成新的唯一值
内容的提问来源于stack exchange,提问作者Darren Gates
相关产品推荐
相关产品推荐

