sql >> Database >  >> RDS >> Mysql

Hoe zorg je ervoor dat er geen gaten in auto_increment-nummers komen?

Ten eerste is het helemaal prima om deze hiaten te hebben. Er is geen probleem . Het is gewoon je OCS die je dwingt te denken dat deze cijfers een patroon moeten volgen - dat doen ze NIET.

  • auto_increment is geen PHP-functie, het is een MySQL-functie
  • auto_increment zorgt ervoor dat elke rij een uniek . krijgt nummer. Het gaat niet over volgnummers
  • auto_increment werkt veilig in een gelijktijdige omgeving - dat betekent dat er veel gebruikers zijn die verbinding maken met MySQL en dingen doen, en ze moeten allemaal met de database kunnen omgaan en niet hetzelfde ID krijgen voor het identificeren van een rij. Dit wordt gedaan door middel van een nogal complex proces en dit is een van de redenen waarom auto_increment levert hiaten op
  • auto_increment wordt gebruikt door InnoDB voor fysieke organisatie van records op schijf - het gebruikt de functie van auto_increment en die produceert een getal dat groter is dan de vorige (dat is wat hij doet, groter dan de vorige, niet opeenvolgend). Hiermee wordt een b-tree geconstrueerd en worden de records in volgorde op de harde schijf geschreven. Knoeien met auto_increment maakt InnoDB de boom opnieuw in evenwicht brengen. Het betekent dat het records doorloopt en de index opnieuw maakt als je ermee knoeit - dat is iets wat je niet wilt. Ooit

Als je erover nadenkt, wat krijg je dan zelfs met opeenvolgende getallen? Niets eigenlijk, behalve dat je hersenen waarschijnlijk minder pijn doen omdat er een denkbeeldige orde is.

Gebruik voor opeenvolgende nummers triggers om ze te maken. auto_increment heeft één taak en slechts één taak - om uniek te produceren nummers.



  1. Sqlite3 voegt niet meerdere rijen in volgorde in

  2. Toegang tot een specifieke tabel in html-tag

  3. Een-op-veel SQL SELECT in één rij

  4. MySQL relationele databases gebruiken op Gentoo