Moin,
eigentlich habe ich mehr aus dem Bauch heraus geantwortet, was sicherlich nicht immer die beste Idee ist, ohne mir den ganzen Thread durchzulesen. Im Nachhinein ist mein Beitrag aber nicht gänzlich falsch und führt uns bei Transaktionen zum "Isolation Level" (Isolationsstufe).
Die MYSQL-Doku sagt, dass im ISO das Level SERIALIZABLE (höchste Transaktionssicherheit) als Standard gesetzt ist, MYSQL aber die nächste niedrigere Stufe nutzt (REPEATABLE READ glaub ich war's). Das bezieht sich alles auf Transaktionen, wenn man denn eine durchführen möchte. Das je nach Isolationsstufe nicht nur Tabellen für's Lesen/Schreiben gesperrt werden können, sondern auch Zeilen, und dass es auch noch Zeilenversionen gibt/geben kann, und das es auch in den Tabellen selbst festgelegt werden kann, und dass es auch noch verteilte Transaktionen gibt ... na das kann man alles "ergoogeln", ich wollte das nur mal erwähnen. Die Dirty Reads und Phantome hast du ja schon erwähnt.
Letztendlich ist das total wurscht, denn es ging ja um ein AUTO_INCREMENT, und ob hier Lücken (in der definierten Abstufung) entstehen. Ja die enstehen spätestens dann, wenn man den betreffenden Datensatz löscht.
Wenn T-Rex meint, er hätte beobachtet, dass die ID nicht wieder frei gegeben wird, dann liegt das wahrscheinlich daran, dass beim manuellen Rollback last_insert_id() im Geltungsbereich der Sitzung nicht zurückgesetzt wird.
Und wann, wielange durch wen und warum wird eine Tabelle fürs Schreiben gesperrt? Und durch wen und wann wird die Sperre wieder aufgehoben?
Solange wie die Transaktion halt dauert :P
Man sollte sich halt wirlich überlegen, ob man jetzt eine Transaktion braucht und wie hoch das Bedürfnis an Integrität ist. Wobei .. Integrität .. da denke ich eher an Fremdschlüssel, wieder aus dem Bauch heraus.
Wenn man also keine "academic locks" benutzt ...
Habe ich noch nicht gehört, ich vermute mal du beziehst dich hier auf die Logik im Programm? Am besten noch einen Timestamp abspeichern und dann nach 1 - 2 Tagen die Daten abgrasen/filtern. Gehört für mich in den Workflow.
Gruß