Moin!
Mein eigentliche Frage ist: Was passiert, wenn zwischen dem Anlagen des Datensatzes und der Abfrage mit SELECT LAST_INSERT_ID() ein weiterer Datensatz (z.B. von einem anderen Client aus) angelegt worden ist?
Dann bekommst du dessen ID. Deshalb sollte man den Eintrag in die Tabelle und die Abfrage der ID atomar kapseln. Ähnliche Beispiele wären Update-Funktionen.
Nein, falsch!
Die LAST_INSERT_ID() ist PRO CONNECTION immer die ID des letzten über diese Connection erzeugten Datensatzes. Wenn man also INSERT macht, und die Connection dann nicht trennt, und dann die Insert-ID abfragt, kriegt man garantiert die des eben gemachten Inserts. Das regelt die Datenbank so, alles andere hätte absolut keinen Sinn, denn Datenbanken bewegen sich schon immer in einem Multi-User-Umfeld.
Wie kann ich garantieren, dass ich die ID des von mir gerade angelegten Datensatzes bekomme? Und wird das mit mysql_insert_id() automatisch garantiert?
Frage die ID sofort nach dem INSERT ab. Theoretisch gibt es da zwar immernoch eine Race-Condition, die ist aber zu vernachlässigen. Ansonsten beschäftige dich näher mit dem Thema -> http://www.google.de/#hl=de&q=race+condition+mysql.
Es gibt keinerlei Race-Condition. Du bist einfach falsch informiert - und das, obwohl die richtige Lösung zu dieser häufig gestellten Frage schon mehrfach hier im Forum geschrieben wurde...
- Sven Rautenberg