You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL中按key分组为同组行更新相同UUID值

MySQL实现按Key批量生成统一UUID的方案

问题场景

现有test表数据如下:

namekeyuuid
na1k1NULL
na2k2NULL
na3k1NULL

需求:相同key的行共用同一个UUID,唯一key的行使用独立UUID,最终效果如下:

namekeyuuid
na1k18274e89f-b119-4326-814d-4a864bbbe207
na2k29a6c5f68-a3c2-4250-ac31-cc8c86a6440c
na3k18274e89f-b119-4326-814d-4a864bbbe207

已知PostgreSQL的CTE实现方式,需要转换为MySQL写法。

解决方案

MySQL 8.0+版本(支持CTE)

WITH cte AS (
    SELECT `key`, UUID() AS uuid
    FROM test
    GROUP BY `key`
)
UPDATE test
JOIN cte ON test.`key` = cte.`key`
SET test.uuid = cte.uuid;

MySQL 5.x版本(不支持CTE)

用子查询替代CTE:

UPDATE test
JOIN (
    SELECT `key`, UUID() AS uuid
    FROM test
    GROUP BY `key`
) AS cte ON test.`key` = cte.`key`
SET test.uuid = cte.uuid;

代码说明

  • 先通过GROUP BY key获取所有唯一的key值,为每个key生成一次UUID,确保同key的行共用同一个值。
  • MySQL的UPDATE语句使用JOIN关联原表和生成的UUID映射集,替代PostgreSQL的FROM语法,完成批量更新。

内容的提问来源于stack exchange,提问作者Attiq Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:40:22