Hello,
INSERT INTO test(bla) VALUES (1),(2),(3)
Du könntest nach dem insert die ids abfragen:
select id from test where bla in (1,2,3)
Da hast du halt zwei Abfragen statt ein paar hundert.
Die sind aber auch nicht automatisch atomar gekapselt. Man müsste also schon genau darüber nachdenken, ob ggf. ein anderer Prozess schon wieder mit den Daten herumgespielt hat.
Da hilft dann wieder die eigene eindeutige Transaktionsnummer im Tabellendesign. Solange die noch gesetzt ist, darf kein anderer Prozess mit dem Datensatz arbeiten.
Die Entfernung der Transaktionsnummer ist immer der letzte Schritt, wenn alle datenverändernden Arbeiten erledigt sind.
Alternativ könnte man sich auch mit einem (virtuellen) Lock auseinandersetzen.
http://dev.mysql.com/doc/refman/5.1/en/lock-tables.html
http://dev.mysql.com/doc/refman/5.1/en/miscellaneous-functions.html#function_get-lock
Und hier sind noch einige Stellen für Dedlfix:
http://dev.mysql.com/doc/refman/5.1/en/internal-locking.html
http://dev.mysql.com/doc/refman/5.1/en/table-locking.html
http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_concurrent_insert
Das Thema ist wohl bei MySQL noch nicht wirklich durch, denke ich.
Während andere Systeme teilweise Row-Locking beim Insert unterstützen, operiert MySQL immer noch mit Table-Locking.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg