Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment s'assurer qu'il n'y a pas d'écart dans les nombres auto_increment ?

Tout d'abord, c'est tout à fait bien avoir ces lacunes. Il n'y a pas de problème . C'est juste votre TOC qui vous oblige à penser que ces chiffres doivent suivre un modèle - ils NE LE FONT PAS.

  • auto_increment n'est pas une fonctionnalité PHP, c'est une fonctionnalité MySQL
  • auto_increment garantit que chaque ligne obtient un unique Numéro. Il ne traite pas les numéros séquentiels
  • auto_increment fonctionne en toute sécurité dans un environnement concurrent - cela signifie qu'il y a beaucoup d'utilisateurs qui se connectent à MySQL et font des choses, et tous doivent être capables de gérer la base de données et de ne pas obtenir le même identifiant pour identifier une ligne. Cela se fait par un processus assez complexe et c'est l'une des raisons pour lesquelles auto_increment donne des lacunes
  • auto_increment est utilisé par InnoDB pour l'organisation physique des enregistrements sur le disque - il utilise la fonctionnalité auto_increment et celui-ci produit un nombre plus grand que le précédent (c'est ce qu'il fait, plus grand que le précédent, pas séquentiel). Grâce à cela, un b-tree est construit et les enregistrements sont écrits en séquence sur le disque dur. Altération de auto_increment rend InnoDB rééquilibrer l'arbre. Cela signifie qu'il parcourt les enregistrements et recrée l'index si vous le dérangez - c'est quelque chose que vous ne voulez pas. Jamais

Quand vous y réfléchissez, qu'obtenez-vous même avec des nombres séquentiels ? Rien vraiment, sauf que votre cerveau vous fait probablement moins mal parce qu'il y a un ordre imaginaire.

Pour les numéros séquentiels, utilisez des déclencheurs pour les créer. auto_increment a un travail et un seul travail - pour produire unique nombres.