Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zapewnić brak przerw w liczbach auto_increment?

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 MySQL
  • auto_increment zapewnia, że ​​każdy wiersz otrzymuje unikalny numer. Nie zajmuje się numerami sekwencyjnymi
  • auto_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órych auto_increment daje luki
  • auto_increment jest używany przez InnoDB 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 przy auto_increment tworzy InnoDB 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Które zapytanie SQL jest lepsze, MATCH AGAINST czy LIKE?

  2. SQL - Jak znaleźć najwyższą liczbę w kolumnie?

  3. SQL Wybór danych z trzech powiązanych tabel

  4. Wygeneruj wiersz tabeli z wartościami <td> z DB PHP

  5. Błąd 2006:serwer MySQL zniknął przy użyciu Pythona, Bottle Microframework i Apache