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:
- traditionell (0)
- konsequent (1) - Standard
- 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.