Mam tabelę MySQL z kluczem podstawowym o automatycznym zwiększaniu. Usunąłem kilka wierszy na środku tabeli. Teraz mam na przykład coś takiego w kolumnie ID: 12, 13, 14, 19, 20. Usunąłem 15, 16, 17 i 18 wierszy.
Chcę zmienić przypisanie / zresetować / zmienić kolejność klucza podstawowego, aby uzyskać ciągłość, tj. Ustawić 19 na 15, 20 na 16 i tak dalej.
Jak mogę to zrobić?
Nawet jeśli to pytanie wydaje się dość stare, zamieści odpowiedź dla kogoś, kto sięgnie tutaj w poszukiwaniu.
Jeśli kolumna jest używana jako klucz obcy w innych tabelach, upewnij się, że używasz
ON UPDATE CASCADE
zamiast wartości domyślnejON UPDATE NO ACTION
relacji klucza obcego w tych tabelach.Ponadto, aby zresetować
AUTO_INCREMENT
licznik, możesz natychmiast wydać następujące oświadczenie.W przypadku MySQL zresetuje wartość do
MAX(id) + 1
.źródło
.
id użytkownika` = @count: = @count + 1`. Z dokumentacji: „Wartość po prawej stronie może być wartością literalną, inną zmienną przechowującą wartość lub jakimkolwiek wyrażeniem prawnym, które daje wartość skalarną”Aby zresetować identyfikatory mojej tabeli użytkowników, używam następującego zapytania SQL. Powiedziano powyżej, że zrujnuje to wszelkie relacje, które możesz mieć z innymi stołami.
źródło
Możesz po prostu użyć tego zapytania
źródło
Myślę, że to wystarczy
źródło
Lub w PhpMyAdmin usuń flagę „AutoIncrement”, zapisz, ustaw ponownie i zapisz. To zresetuje ją.
źródło
Jeśli chcesz
order by
źródło
w phpmyadmin
goto your table-> kliknij menu operacyjne-> goto table options-> zmień AUTO_INCREMENT na to no, od którego chcesz zacząć.
Twój automatyczny przyrost tabeli zacznij od tego nie.
Spróbuj.
źródło
Możesz usunąć funkcję automatycznego zwiększania wartości klucza podstawowego tej kolumny, a następnie za każdym razem, gdy aktualizujesz tę kolumnę, uruchom zapytanie, które policzy wszystkie wiersze w tabeli, a następnie uruchom pętlę, która iteruje przez tę liczbę wierszy, wstawiając każdą wartość do odpowiedni wiersz i na koniec uruchom zapytanie, wstawiając nowy wiersz z wartością w tej kolumnie będącą całkowitą liczbą wierszy plus jeden. To zadziała bezbłędnie i jest najbardziej absolutnym rozwiązaniem dla kogoś, kto próbuje osiągnąć to, kim jesteś. Oto przykład kodu, którego możesz użyć dla funkcji:
Tutaj utworzyłem tablicę asocjacyjną, którą dołączyłem do kolumny rang z zapytaniem w zapytaniu wybierającym, co dało każdemu wierszowi wartość rangi zaczynającą się od 1. Następnie wykonałem iterację po tablicy asocjacyjnej.
Inną opcją byłoby pobranie liczby wierszy, uruchomienie podstawowego zapytania wybierającego, pobranie tablicy asocjacyjnej i wykonanie iteracji w ten sam sposób, ale z dodaną zmienną, która aktualizuje się w każdej iteracji. Jest to mniej elastyczne, ale da to samo.
źródło
w przypadku InnoDB zrób to (spowoduje to usunięcie wszystkich rekordów z tabeli, najpierw wykonaj bakcup):
źródło
Miałem te same wątpliwości, ale nie mogłem dokonać żadnych zmian w tabeli, zdecydowałem, że wykonując następujące czynności, widząc, że mój identyfikator nie przekracza maksymalnej liczby ustawionej w zmiennej @count:
Rozwiązanie wymaga, ale jest bezpieczne i było konieczne, ponieważ moja tabela posiadała klucze obce z danymi w innej tabeli.
źródło
Najlepszym wyborem jest zmiana kolumny i usunięcie atrybutu auto_increment. Następnie wydaj kolejną instrukcję alter i umieść auto_increment z powrotem w kolumnie. Spowoduje to zresetowanie liczby do maks. + 1 bieżących wierszy, a tym samym zachowanie odwołań do kluczy obcych z powrotem do tej tabeli, z innych tabel w bazie danych lub dowolnego innego użycia klucza dla tej kolumny.
źródło
Moim zdaniem jest utworzenie nowej kolumny o nazwie row_order. następnie zmień kolejność w tej kolumnie. Nie akceptuję zmian w kluczu podstawowym. Na przykład, jeśli kolumna zamówienia to pozycja_bannera, zrobiłem coś takiego: To jest do usuwania, aktualizacji, tworzenia kolumny pozycji banera. Wywołaj tę funkcję, odpowiednio je uporządkuj.
źródło
To działa - https ://stackoverflow.com/a/5437720/10219008..... ale jeśli napotkasz problem „Kod błędu: 1265. Dane zostały obcięte dla kolumny„ id ”w wierszu 1” ... Następnie uruchom następujące. Dodanie ignorowania zapytania aktualizującego.
źródło
Możesz także po prostu uniknąć używania identyfikatorów numerycznych jako klucza podstawowego. Możesz użyć kodów krajów jako podstawowego identyfikatora, jeśli tabela zawiera informacje o krajach, lub możesz użyć linków bezpośrednich, jeśli na przykład zawiera artykuły.
Możesz też po prostu użyć wartości losowej lub MD5. Wszystkie te opcje mają swoje zalety, szczególnie w zakresie IT. Identyfikatory numeryczne są łatwe do wyliczenia.
źródło