Если вы используете MySQL 8.0, вы можете использовать row_number()
для этого. Предполагая, что у вас есть уникальный упорядочивающий столбец с именем id
и вы хотите обновить столбец new_id
:
update mytable t
inner join (select id, row_number() over(order by id desc) new_id from mytable) x
on t.id = x.id
set t.new_id = x.new_id
В более ранних версиях одним из вариантов является эмуляция функции окна с помощью пользовательской переменной :
update mytable t
inner join (
select t.id, @new_id := @new_id + 1 new_id
from (select id from mytable order by id desc) t
cross join (select @new_id := 0) x
) x on t.id = x.id
set t.new_id = x.new_id