SQL mysql: Mehrere Zeilen auf einmal einfügen

heulendoch

Ensign
Registriert
Feb. 2014
Beiträge
252
Hallo zusammen,

wahrscheinlich habe ich nur die falschen Begriffe für die Suche in Google verwendet, allerdings konnte ich nichts finden.

Wenn ich mehrere Zeilen auf einmal in eine Tabelle einfüge INSERT(...) VALUES(...) VALUES(...), und mir dann die zuletzt einfügte ID (LastInsertedId) hole (was in diesem Fall wohl die ID der ersten "VALUES" ist). Es könnten z. B. 500 Zeilen sein, die ich einfügen möchte.

Ist in diesem Fall aber sichergestellt, dass in der Zwischenzeit keine weiteren Inserts passiert sind? Ist bei einem Insert die Tabelle für weitere Inserts gesperrt? Ich also davon ausgehen kann, dass der letzte "VALUES" immer LastInsertedId + Anzahl "VALUES" - 1 ist?

Oder gibt es eine andere Möglichkeit alle Ids der einfügten Zeilen zu bekommen (entsprechend der Reihefolge des Inserts)?

Gruß
 
heulendoch schrieb:
Ist bei einem Insert die Tabelle für weitere Inserts gesperrt?
Je nach DBMS und Engine: Ja

heulendoch schrieb:
ch also davon ausgehen kann, dass der letzte "VALUES" immer LastInsertedId + Anzahl "VALUES" - 1 ist?
musst du wissen, , aber schau doch mal hier:
http://sql.lernenhoch2.de/lernen/sql-einleitung/tabellen-erklart/primary-key-und-auto-increment/
Beantwortet deine Frage vielleicht schon

Solltest du vielleicht auch lesen: https://www.sql-und-xml.de/sql-tutorial/erste-normalform-datentypen.html
 
madmax2010 schrieb:
Ich weiß das schon mit autoincrement und primary key, aber ich wusste halt nicht, ob ein anderer Insert der auf diese Tabelle folgt dazwischen funken könnte, da mehrere Clients gleichzeitig (über ne API) inserts machen können.
 
https://dev.mysql.com/doc/refman/8.0/en/innodb-auto-increment-handling.html

“Simple inserts”
Statements for which the number of rows to be inserted can be determined in advance (when the statement is initially processed). This includes single-row and multiple-row INSERT and REPLACE statements that do not have a nested subquery, but not INSERT ... ON DUPLICATE KEY UPDATE

innodb_autoinc_lock_mode = 2 (“interleaved” lock mode)
....
If the only statements executing are “simple inserts” where the number of rows to be inserted is known ahead of time, there are no gaps in the numbers generated for a single statement, except for “mixed-mode inserts”.

Ich muss mal schauen ob es auf zwei steht (was der Default sein soll), dann muss ich gar nichts machen.. dann ist es so wie ich es möchte. :)
 
Zurück
Oben