Einzelnen Beitrag anzeigen

Benutzerbild von anse
anse

Registriert seit: 30. Okt 2006
Ort: Neuenkirchen
197 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Von INSERT generierte Daten erfassen

  Alt 8. Aug 2009, 00:31
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.
Ansgar Becker
  Mit Zitat antworten Zitat