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

如何基于另一列的排序序列在MySQL表中添加自增ID

按指定列字典序添加ID列的解决方案

问题说明

现有一张未设置自增ID的表,表内数据未排序,需要基于CLASS列的字典序生成连续的ID列,示例如下:

当前表

CLASSITEM
fruitsbanana
toolshammer
fruitsapple
flurabanyan
faunahuman

添加ID后

IDCLASSITEM
1fruitsapple
2fruitsbanana
3flurabanyan
4toolshammer
5faunahuman

实现方案

支持窗口函数的数据库(MySQL 8.0+/PostgreSQL/SQL Server/Oracle等)

使用ROW_NUMBER()窗口函数,按CLASS列的字典序排序生成ID:

SELECT 
    ROW_NUMBER() OVER (ORDER BY CLASS ASC) AS ID,
    CLASS,
    ITEM
FROM your_table_name;

如果需要将ID永久添加到表中,可执行以下操作:

  1. 新增ID列:
ALTER TABLE your_table_name ADD COLUMN ID INT;
  1. 更新ID值:
WITH ranked_data AS (
    SELECT 
        ROW_NUMBER() OVER (ORDER BY CLASS ASC) AS new_id,
        CLASS,
        ITEM
    FROM your_table_name
)
UPDATE your_table_name t
JOIN ranked_data rd ON t.CLASS = rd.CLASS AND t.ITEM = rd.ITEM
SET t.ID = rd.new_id;

注意:若表中存在重复的CLASS+ITEM组合,需调整关联条件保证唯一匹配。

旧版MySQL(无窗口函数)

使用用户变量生成ID:

SELECT 
    @row_num := @row_num + 1 AS ID,
    CLASS,
    ITEM
FROM your_table_name, (SELECT @row_num := 0) AS init
ORDER BY CLASS ASC;

永久添加ID的步骤:

  1. 新增ID列:
ALTER TABLE your_table_name ADD COLUMN ID INT;
  1. 更新数据:
SET @row_num := 0;
UPDATE your_table_name 
SET ID = @row_num := @row_num + 1
ORDER BY CLASS ASC;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:10:42