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

如何在MariaDB中基于最后一行值将列值递增1

需求:为MariaDB表中null的id_subjekta列设置递增数值

现有MariaDB中的mape表,需要将id_subjekta列的null值替换为从1开始依次递增的数值,最终效果如下:

|id_subjekata|
     1
     2
     3
     4 
   .....

尝试过的无效方法

方法一:REPLACE INTO语句

执行以下SQL时报错:

REPLACE INTO `mape` (`id`, `naziv_subjekta`, `id_subjekta`, `predlozak`, `sifra`, `naziv`, `opis`, `izradio`, `izradio_id`, `status`, `zakljucak`, `uvodno_o_obvezniku`, `izjava_o_ciljevima`, `sadrzaj`, `redni_broj`, `revizija_broj`, `revizija_datum`, `kontrolirao`, `kontrolirao_id`, `datum_kontrole`, `odobrio_id`, `odobrio`, `datum_odobrenja`, `datum_izrade`, `izradio_funkcija`, `kontrolirao_funkcija`, `odobrio_funkcija`, `tip`, `vrste_organizacijskih`, `suzbijanje_korupcije`, `isu`, `popis`, `popis_tablica`, `popis_grafickih_prikaza`, `popis_slika`, `upravljanje_kvalitetom`, `original_id`, `country`) VALUES
 (%s, %s, (SELECT MAX(id_subjekta) + 1  FROM id_subjekta, %s, %s,%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);

方法二:UPDATE语句

执行以下SQL后,所有id_subjekta值都变为1,不符合需求:

Update mape Set id_subjekta = id_subjekta + 1;

可行解决方案

方法一:使用会话变量逐行赋值

通过定义会话变量实现递增赋值,仅更新id_subjekta为null的行:

SET @counter = 0;
UPDATE mape 
SET id_subjekta = @counter := @counter + 1
WHERE id_subjekta IS NULL;

如果需要对所有行重新按顺序赋值,去掉WHERE条件即可:

SET @counter = 0;
UPDATE mape 
SET id_subjekta = @counter := @counter + 1;

方法二:使用窗口函数(MariaDB 10.2+支持)

结合窗口函数生成递增序号,通过关联更新实现需求,这里假设id是表的主键或可确定排序的字段,可根据实际调整ORDER BY的排序字段:

UPDATE mape m
JOIN (
    SELECT id, ROW_NUMBER() OVER (ORDER BY id) AS new_id
    FROM mape
) t ON m.id = t.id
SET m.id_subjekta = t.new_id
WHERE m.id_subjekta IS NULL;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:18:16