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

如何在MySQL表中为10万行数据插入1-24循环序列值?

解决MySQL表中10万行插入1-24循环数字的问题

嘿,这个需求其实用MySQL的内置函数就能轻松搞定,不用写复杂的脚本,我分两种常见场景给你方案:

场景1:给现有表新增列并填充循环数字

假设你的表名叫your_table,已经有10万行数据,现在要新增一列(比如叫cycle_num)来存储1-24循环的数字。

方案A:MySQL 8.0+(支持窗口函数)

窗口函数ROW_NUMBER()可以快速给每行生成序号,再结合MOD()函数实现循环:

-- 先新增列
ALTER TABLE your_table ADD COLUMN cycle_num INT;

-- 用窗口函数计算循环值并更新
UPDATE your_table t
JOIN (
    SELECT 
        id, -- 这里用你的表的主键/唯一标识列,确保行顺序稳定
        MOD(ROW_NUMBER() OVER (ORDER BY id) - 1, 24) + 1 AS cycle_num
    FROM your_table
) AS row_nums ON t.id = row_nums.id
SET t.cycle_num = row_nums.cycle_num;

原理:

  • ROW_NUMBER() OVER (ORDER BY id)给每行按id排序生成1、2、3...的序号
  • 序号减1后对24取模,这样第24行的结果是23,加1后得到24;第25行序号减1是24,模24得0,加1回到1,完美实现循环。

方案B:MySQL 5.x(不支持窗口函数)

用用户变量来生成行号,同样结合MOD()函数:

-- 先新增列
ALTER TABLE your_table ADD COLUMN cycle_num INT;

-- 初始化用户变量
SET @row_counter = 0;

-- 更新数据
UPDATE your_table
SET cycle_num = MOD((@row_counter := @row_counter + 1) - 1, 24) + 1
ORDER BY id; -- 这里的排序依据要和你期望的循环顺序一致

场景2:插入10万行数据时直接生成循环数字

如果是要插入新的10万行,同时附带1-24循环的数字,可以用递归CTE(MySQL 8.0+):

WITH RECURSIVE row_generator AS (
    SELECT 
        1 AS row_id,
        1 AS cycle_num
    UNION ALL
    SELECT 
        row_id + 1,
        MOD(row_id, 24) + 1 -- 等价于 MOD(row_id - 1, 24) + 1,效果一致
    FROM row_generator
    WHERE row_id < 100000
)
INSERT INTO your_table (cycle_num, [其他列名]) -- 替换成你的实际列名
SELECT cycle_num, [其他列的值] -- 比如如果其他列是固定值,就写固定值,或者按需生成
FROM row_generator;

注意事项

  • 排序依据:不管是更新还是插入,ORDER BY的列要确保是你需要的顺序,不然循环的起始位置可能不符合预期
  • 性能:10万行数据的更新/插入在MySQL中属于常规操作,只要硬件正常,不会有太大问题;如果担心锁表,可以考虑分批操作(比如每次更新1万行)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:50:33