sql >> Database teknologi >  >> RDS >> Mysql

Hvordan sikrer man, at der ikke er huller i auto_increment-tal?

For det første er det fuldstændig i orden at have disse huller. Der er intet problem . Det er bare din OCD, der tvinger dig til at tro, at disse tal skal følge et mønster – det gør de IKKE.

  • auto_increment er ikke en PHP-funktion, det er MySQL-funktion
  • auto_increment sikrer, at hver række får en unik nummer. Den beskæftiger sig ikke med sekventielle numre
  • auto_increment fungerer sikkert i et samtidig miljø - det betyder, at der er mange brugere, der forbinder til MySQL og laver ting, og alle skal være i stand til at håndtere databasen og ikke få det samme id for at identificere en række. Dette gøres gennem en ret kompleks proces, og dette er en af ​​grundene til, at auto_increment giver huller
  • auto_increment bruges af InnoDB til fysisk organisering af poster på disk - den bruger funktionen auto_increment og at man producerer et tal, der er større end tidligere (det er, hvad det gør, større end tidligere, ikke sekventielt). Ved hjælp af dette konstrueres et b-træ, og poster skrives i rækkefølge på harddisken. Ændring af auto_increment laver InnoDB genbalancere træet. Det betyder, at den går gennem poster og genskaber indekset, hvis du roder med det - det er noget, du ikke ønsker. nogensinde

Når du tænker over det, hvad får du så med sekventielle numre? Ikke rigtig noget, bortset fra at din hjerne sandsynligvis gør mindre ondt, fordi der er en imaginær orden.

For sekventielle numre skal du bruge triggere til at oprette dem. auto_increment har ét job og kun ét job - at producere unik tal.



  1. Databasen fjernes ikke, når Android-applikationen afinstalleres

  2. Besvær med variabel laglængde

  3. Sådan opretter du forbindelse til MySQL ved hjælp af PHP

  4. Er der en ækvivalent til MySQL's multi_query() i PDO?