Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann sichergestellt werden, dass keine Lücken in auto_increment-Zahlen vorhanden sind?

Zunächst einmal ist es völlig in Ordnung diese Lücken haben. Es gibt kein Problem . Es ist nur Ihre Zwangsstörung, die Sie zu der Annahme zwingt, dass diese Zahlen einem Muster folgen müssen – das tun sie nicht.

  • auto_increment ist kein PHP-Feature, sondern ein MySQL-Feature
  • auto_increment stellt sicher, dass jede Zeile ein Unikat erhält Nummer. Es behandelt keine fortlaufenden Nummern
  • auto_increment funktioniert sicher in einer gleichzeitigen Umgebung - das bedeutet, dass sich viele Benutzer mit MySQL verbinden und Dinge tun, und alle müssen in der Lage sein, mit der Datenbank umzugehen und nicht dieselbe ID zum Identifizieren einer Zeile zu erhalten. Dies geschieht durch einen ziemlich komplexen Prozess und dies ist einer der Gründe für auto_increment ergibt Lücken
  • auto_increment wird von InnoDB verwendet für die physische Organisation von Datensätzen auf der Festplatte - es verwendet die Funktion von auto_increment und dieser erzeugt eine Zahl, die größer als die vorherige ist (das ist, was es tut, größer als die vorherige, nicht sequentiell). Unter Verwendung dessen wird ein B-Baum konstruiert und Datensätze werden nacheinander auf die Festplatte geschrieben. Manipulation von auto_increment macht InnoDB den Baum wieder ins Gleichgewicht bringen. Es bedeutet, dass es Datensätze durchgeht und den Index neu erstellt, wenn Sie damit herumspielen - das ist etwas, das Sie nicht wollen. Immer

Wenn Sie darüber nachdenken, was bekommen Sie überhaupt mit fortlaufenden Nummern? Nichts wirklich, außer dass dein Gehirn wahrscheinlich weniger schmerzt, weil es eine imaginäre Ordnung gibt.

Verwenden Sie für fortlaufende Nummern Trigger, um sie zu erstellen. auto_increment hat einen Job und nur einen Job - um Unikate zu produzieren Nummern.