Zmień wartość kolumny identyfikatora automatycznego zwiększania mysql

Nov 20 2020

Mam tabelę mysql z gpid AUTO_INCREMENT NOT NULL UNIQUEkolumną.

Po wypełnieniu tej tabeli (która ma ponad 50 mln wpisów), zdałem sobie sprawę, że mysql nadal zwiększa AUTO_INCREMENTliczbę kolumn, jeśli transakcja nie powiedzie się z powodu błędu IntegrityError i co zrozumiałe.

Rezultatem są luki w AUTO_INCREMENTkolumnach, z gpidwartościami skokowymi (na przykład od gpid == 3do gpid == 5między dwoma kolejnymi wierszami). Chociaż nie jest to problem dla maszyn, jest to problem dla moich współpracowników i dla mnie. Celem tej kolumny było między innymi przedstawienie dokładnej liczby wierszy w tabeli.

Czy istnieje sposób, aby zmienić wszystkie gpidwartości kolumn w ładnym zakresie (od 1 do 53926669), przestrzegając kolejności wstawiania wierszy w tabeli, bez konieczności upuszczania / uzupełniania tabeli? Uzupełnianie zajęłoby mi dużo czasu.

Dziękuję Ci.

Odpowiedzi

GMB Nov 20 2020 at 13:29

MySQL, podobnie jak inne bazy danych, nie gwarantuje braku luk w kolumnie autoinkrementacji. Zmiana numeracji tabeli może rozwiązać problem w określonym momencie, ale luki mogą (i najprawdopodobniej) pojawić się w przyszłości.

Jeśli chcesz, aby sekwencja rosła monotycznie, to automatyczna inkrementacja nie jest tym, czego potrzebujesz. Zamiast tego możesz na przykład utworzyć widok i użyć row_number():

create view myview as
select t.*, row_number() over(order by gpid) as new_gpid
from mytable t