Verwenden Sie eine Aktualisierung mit einer Verknüpfung:
set @rank := 0;
update tbl a join
(select id, @rank := @rank + 1 as new_rank from tbl order by col) b
on a.id = b.id set a.rank = b.new_rank;
Wenn Sie mit vielen Zeilen rechnen, erzielen Sie die beste Leistung, wenn Sie die Verknüpfung mit einer Tabelle durchführen, die indiziert ist, z. B.:
set @rank := 0;
create temporary table tmp (id int primary key, rank int)
select id, @rank := @rank + 1 as rank from tbl order by col;
update tbl join tmp on tbl.id = tmp.id set tbl.rank = tmp.rank;
Schließlich könnten Sie die Aktualisierung auch ganz überspringen und eine neue Tabelle einfügen (was nicht immer machbar ist):
set @rank := 0;
create table new_tbl (id int primary key, rank int, col char(10),
col2 char(20)) select id, @rank := @rank + 1 as rank, col, col2
from tbl order by col;
drop table tbl;
rename table new_tbl to tbl;