Zmień wartość kolumny identyfikatora automatycznego zwiększania mysql
Mam tabelę mysql z gpid AUTO_INCREMENT NOT NULL UNIQUE
kolumną.
Po wypełnieniu tej tabeli (która ma ponad 50 mln wpisów), zdałem sobie sprawę, że mysql nadal zwiększa AUTO_INCREMENT
liczbę kolumn, jeśli transakcja nie powiedzie się z powodu błędu IntegrityError i co zrozumiałe.
Rezultatem są luki w AUTO_INCREMENT
kolumnach, z gpid
wartościami skokowymi (na przykład od gpid == 3
do gpid == 5
mię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 gpid
wartoś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
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