sql >> Databasteknik >  >> RDS >> Mysql

Hur säkerställer man inga luckor i auto_increment-tal?

För det första är det helt bra att ha dessa luckor. Det är inga problem . Det är bara din tvångssyndrom som tvingar dig att tro att dessa siffror måste följa ett mönster – det gör de INTE.

  • auto_increment är inte en PHP-funktion, det är MySQL-funktion
  • auto_increment säkerställer att varje rad får en unik siffra. Det handlar inte om sekventiella nummer
  • auto_increment fungerar säkert i samtidig miljö - det betyder att det finns många användare som ansluter till MySQL och gör saker, och alla måste kunna hantera databasen och inte få samma ID för att identifiera en rad. Detta görs genom en ganska komplex process och detta är en av anledningarna till att auto_increment ger luckor
  • auto_increment används av InnoDB för fysisk organisation av poster på disk - den använder funktionen auto_increment och att man producerar ett tal som är större än tidigare (det är vad det gör, större än tidigare, inte sekventiellt). Med hjälp av detta konstrueras ett b-träd och poster skrivs i sekvens på hårddisken. Ändra med auto_increment gör InnoDB balansera om trädet. Det betyder att den går igenom poster och återskapar indexet om du bråkar med det - det är något du inte vill ha. Någonsin

När du tänker efter, vad får du ens med sekventiella nummer? Ingenting egentligen, förutom att din hjärna förmodligen gör mindre ont eftersom det finns en imaginär ordning.

För sekventiella nummer, använd triggers för att skapa dem. auto_increment har ett jobb och bara ett jobb - att producera unik siffror.



  1. Fjärråtkomst till Mysql

  2. Vilken är den underordnade tabellen i ett identifierande eller icke-identifierande förhållande?

  3. PostgreSQL 12:Främmande nycklar och partitionerade tabeller

  4. Mac + virtualenv + pip + postgresql =Fel:pg_config körbar fil hittades inte