Sorry hab überlesen dass du für mehrere
Query-Threads dieselbe Verbindung benutzt - hört sich merkwürdig an, funktioniert das ohne Abstürze und sonstige Sonderfälle?
Jedenfalls wird das Abfragen der LAST_INSERT_ID() damit zum Glücksspiel - die kann bei gleichem Timing die ID eines anderen Threads zurückliefern, in so einem Fall, dend der Server arbeitet die Queries nun mal thread-los ab, wenn du eine einzige Verbindung benutzt:
1. Thread A: INSERT
2. Thread A: SELECT LAST_INSERT_ID()
** Alles ok, phew.. **
3. Thread B: INSERT
4. Thread C: INSERT
5. Thread B: SELECT LAST_INSERT_ID()
6. Thread C: SELECT LAST_INSERT_ID()
** Böses durcheinander **
Besser wäre es für jede
Query eine eigene Verbindung aufzubauen. Hört sich verschwenderisch an, und eigentlich braucht man daß bei INSERTs nicht, weil das eh schnell genug ist. Außerdem ist die relevante Tabelle eh gelockt für die Zeit des INSERTs was multi-Thread-INSERTs unterm Strich dann doch wieder eins nach dem anderen abarbeitet. Also, Empfehlung: Keine Threads für INSERTs verwenden, hat keinen Vorteil, macht deinen Code nur komplizierter.