RealNerds

Jak zreindeksować tabelę w MySQL

written by Maciej Górecki on 2019-09-01

Problem: Załóżmy, że mamy tabelę w której ID (int) nie ma zachowanej ciągłości (np usuwaliśmy niektóre wpisy bo były niepotrzebne) tzn. ID wygląda przykładowo tak:


id, city
1, Kraków 
2, Warszawa
5, Pcim
10, Tarnów
3121, Katowice
4332 Poznań

Chcemy teraz zrobić tak, żeby pola ID inkrementowały się o 1 rosnąco. Tzn. chcemy np. otrzymać rekordy, jak poniżej:


1, Kraków
2, Warszawa
3, Pcim
4, Tarnów
5, Katowice
6, Poznań

Rozwiązanie:


SET @newid=0;
UPDATE miasta SET id=(@newid:=@newid+1) ORDER BY id asc;

Uwaga, przy tabeli zawierającej dużo rekordów, może potrwać to długo.