MySQL indeksy

0

Ostatnio zacząłem uczyć się MySQL i zacząłem się zastanawiać nad pewnym problemem. Jeżeli w tabeli mam indeksy i np. do tabeli wprowadzam kilka rekordów i potem je usuwam, a następnie znów dodaje rekordy to indeksy nie zaczynają się od wartości początkowej tylko idą dalej. Albo gdy usunę rekord ze środka, to wartości indeksów po nim występujących nie zmieniają się, tzn. nie zmniejszają o 1. Czy jest jakiś sposób na ten problem?

0

Nie chodzi ci o indeksy, tylko raczej o autonumerowanie - prędzej identyfikatory, niż indeksy.
I tak ma być.

Jeżeli usuniesz rekord ze środka, to rekordy po nim nie będą miały zmienionych identyfikatorów, bo... to nie ma sensu. Musiałbyś także zmienić wszystkie powiązania pomiędzy rekordami od razu, a gdyby to był na przykład miliard rekordów? Trochę by to trwało.

Jeżeli chcesz mieć dodawanie nowych rekordów "bez dziur" - to jest to wykonalne (z problemami), ale niepotrzebne. Zastanów się - dlaczego rekordy miałyby być numerowane po kolei? Ta numeracja ma znaczenie tylko dla powiązań pomiędzy tabelami tak naprawdę.

0

Jeżeli usuwasz wszystkie rekordy z tabeli, to możesz 'zresetować' licznik pola typu AUTO_INCREMENT usuwając rekordy poleceniem TRUNCATE TABLE zamiast zwykłego DELETE FROM nazwa_tabeli.

Jeżeli chcesz uzupełnić dziury w numeracji w istniejącej tabeli wystarczy dropnąć pole typu AUTO_INCREMENT oraz dodać je ponownie poleceniem ALTER TABLE z takimi samymi atrybutami jak wcześniej.

Takie operacje mogą powodować problemy, w sytuacji istnienia kluczy obcych do tej tabeli. Powinno się je wykonywać tylko w sytuacji, gdy dokładnie wiemy co robimy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1