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

Wenn ich mehrere Zeilen in eine MySQL-Tabelle EINFÜGE, werden die IDs jedes Mal um 1 erhöht?

Die Antwort ist:Nun, es kommt darauf an.

Im Fall von myisam ist die Antwort ein klares Ja, da myisam-Sequenzen Anfragen einfügen.

Im Falle von innodb ist das Verhalten jedoch seit mysql v5.1 konfigurierbar. vor v5.1, dann ist die Antwort für InnoDB auch ja, danach hängt es vom innodb_autoinc_lock_mode ab Einstellung. Einzelheiten finden Sie in der MySQL-Dokumentation zur innodb-auto_increment-Konfiguration .

Um Ihnen die Highlights zu geben, gibt es 3 innodb_autoinc_lock_mode Einstellungen:

  1. traditionell (0)
  2. konsequent (1) - Standard
  3. verschachtelt (2)

Weitere Lücken können im auto_increment-Wert auftreten, wenn eine Transaktion rückgängig gemacht wurde. Eine Bulk-Einfügung kann nur als Ganzes rückgängig gemacht werden.

AKTUALISIERUNG: Wie oben beschrieben, erhalten Sie Szenario 1) oder 2) , wenn Sie

verwenden
  • myisam-Tabellen-Engine
  • oder innodb vor mysql v5.1
  • oder innodb mit mysql v5.1 oder neuer und dem innodb_autoinc_lock_mode 0 oder 1 ist

Es gibt keine Möglichkeit zu sagen, was zuerst eingefügt wird.

Möglicherweise erhalten Sie Szenario 3) oder 4) wenn Sie

verwenden
  • innodb mit innodb_autoinc_lock_mode 2

Auch hier gibt es keine Möglichkeit zu sagen, wie und warum mysql die Reihenfolge der Datensätze durcheinander bringt.

Wenn sich Ihre Frage also auf die Tatsache bezieht, dass Sie 3 Datensätze mit Masseneinfügung einfügen und last_insert_id() nur den auto_increment-Wert des ersten eingefügten Datensatzes zurückgibt, und Sie die IDs der anderen 2 Datensätze durch einfache Addition erhalten möchten, ist das Sie Möglicherweise müssen Sie die Konfiguration von mysql basierend auf der verwendeten Tabellen-Engine und mysql-Version überprüfen.