MySQL AUTO_INCREMENT-Verhalten bei einem in mehreren Zeilen gleichzeitig einfügen
Ich denke, die Antwort auf meine Frage ist offensichtlich, aber da konnte ich nicht finden, keine Dokumentation, um es zu unterstützen, dachte ich es lohnt sich, zu Fragen. Zumindest für das Protokoll.
Wie wir alle wissen AUTO_INCREMENT
Felder erhöht, und jedes mal, wenn ein INSERT
- Anweisung ausgeführt wird. Und sein Wert kann abgerufen werden, indem LAST_INSERT_ID()
Funktion. Es ist auch erwähnt in Die MySQL-Handbuch, dass mit multiple-row-inserts LAST_INSERT_ID()
wird wieder die erste ID der eingefügten Zeilen. Ich denke, das ist eine gute Idee (wirklich nützlich).
So, hier geht meine Frage:
Kann ich davon ausgehen, in einem INSERT IGNORE INTO
- Anweisung mit mehreren Zeilen, die eingefügt IDs eines AUTO_INCREMENT
Feld wird immer sequentiell? Beachten Sie, dass aufgrund IGNORE
Modifikator und der multi-user-Natur der MySQL-server, verschiedene Szenarien passieren könnte.
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, Sie können nicht davon ausgehen, dass. Ein Szenario, in dem die ID ' s würden nicht sequentiell ist, ist in replizierten multi-master setup. Wenn zum Beispiel zwei Servern bestehen in einem solchen setup, wird man nur erzeugen, sogar auto-IDs, und die andere nur ungerade IDs (denken Sie daran, es ist nur ein Beispiel).
Jedoch, wenn Ihr setup ist nicht irgendwas, dann ja. Zumindest in InnoDB-Einlagen sind aus Atomen und sind in der Warteschlange, wenn welche auf gleiche Tabelle, also ID ' s von zwei verschiedenen INSERT-wird nicht interlace. (es ist nicht dokumentiert, obwohl, so dass Sie sich auf es ist... ein wenig riskant)
Wie ich getestet habe, IGNORIEREN INSERT-ID-Generierung:
IGNORE
modifier, tun die doppelten Zeilen Voraus, die Zähler, obwohl Sie eingefügt werden? Ich Frage, weil ich gesehen habe, dass in der einzelnen ZeileINSERT
Angaben ohneIGNORE
Modifikator, der Zähler wird erhöht, wenn einige Fehler passiert, selbst wenn die Zeile nicht eingefügt!IGNORE
modifier nicht, erhöht sich der Zähler. Das ist für Zeilen, die duplicate key - Fehler werden sich in Warnungen.