Po pierwsze, jest całkowicie w porządku mieć te luki. nie ma problemu . To tylko twoje OCD zmusza cię do myślenia, że te liczby muszą być zgodne ze schematem – NIE.
auto_increment
nie jest funkcją PHP, to jest funkcja MySQLauto_increment
zapewnia, że każdy wiersz otrzymuje unikalny numer. Nie zajmuje się numerami sekwencyjnymiauto_increment
działa bezpiecznie w środowisku współbieżnym - oznacza to, że wielu użytkowników łączy się z MySQL i robi różne rzeczy, a wszyscy muszą radzić sobie z bazą danych i nie uzyskiwać tego samego identyfikatora do identyfikacji wiersza. Odbywa się to za pomocą dość złożonego procesu i jest to jeden z powodów, dla którychauto_increment
daje lukiauto_increment
jest używany przezInnoDB
do fizycznej organizacji rekordów na dysku - wykorzystuje funkcjęauto_increment
i że jeden daje liczbę, która jest większa niż poprzednia (to właśnie robi, większa niż poprzednia, nie sekwencyjna). Dzięki temu konstruowane jest b-drzewo, a rekordy są zapisywane po kolei na dysku twardym. Manipulowanie przyauto_increment
tworzyInnoDB
zrównoważyć drzewo. Oznacza to, że przechodzi przez rekordy i odtwarza indeks, jeśli z nim zadzierasz - to jest coś, czego nie chcesz. Kiedykolwiek
Kiedy się nad tym zastanowisz, co w ogóle otrzymujesz z kolejnymi numerami? Tak naprawdę nic, z wyjątkiem tego, że mózg prawdopodobnie mniej boli, ponieważ istnieje jakiś wyimaginowany porządek.
W przypadku numerów sekwencyjnych użyj wyzwalaczy, aby je utworzyć. auto_increment
ma jedną pracę i tylko jedną pracę - aby produkować unikalne numery.