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

如何在MySQL中自动更新重复记录的name列并添加序号

解决MySQL重复name字段自动添加序号的问题

这个需求我之前处理过,用MySQL 8.0及以上版本支持的窗口函数就能简单实现,不用写复杂的存储过程。

实现思路

核心是用ROW_NUMBER()窗口函数对每个相同name的分组按id排序,生成序号,然后对每组中除第一个外的记录,将name和序号拼接起来。

先验证结果再更新(重要!)

数据更新不可逆,建议先执行下面的查询确认结果是否符合预期:

SELECT 
    id,
    CONCAT(name, CASE WHEN seq > 0 THEN seq ELSE '' END) AS updated_name
FROM (
    SELECT 
        id,
        name,
        -- 分组后按id排序,序号从0开始(减1是为了让第一个记录的序号为0)
        ROW_NUMBER() OVER (PARTITION BY name ORDER BY id) - 1 AS seq
    FROM your_table -- 替换成你的实际表名
) temp;

实际更新语句

如果上面的查询结果没问题,再执行更新操作:

UPDATE your_table t
JOIN (
    SELECT 
        id,
        name,
        ROW_NUMBER() OVER (PARTITION BY name ORDER BY id) - 1 AS seq
    FROM your_table
) temp ON t.id = temp.id
SET t.name = CONCAT(temp.name, temp.seq)
WHERE temp.seq > 0; -- 只更新每组中从第二个开始的记录,避免修改第一个原始值

关键逻辑说明

  • PARTITION BY name:把相同name的记录归为一组
  • ORDER BY id:保证每组内按id的顺序生成序号,正好匹配你想要的id2对应test1、id3对应test2的逻辑
  • WHERE temp.seq > 0:跳过每组的第一个记录,保留原始的name值(比如id1的test、id4的ok)

内容的提问来源于stack exchange,提问作者Sadraddin Roohani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:57:42