INSERT über mehrere Tabellen mit Fremdschlüssel (mySQL)
Martin23
- datenbank
Hallo,
ich habe mehrere Tabellen, die über Fremdschlüssel miteinander verbunden sind.
Aus Performancegründen möchte ich in die Haupttabelle nur eine (statt einzelne für jeden Datensatz) Insert-DB-Abfrage durchführen, die mehrere Datensätze einfügt, z.B. so:
INSERT INTO haupttabelle (id, name) VALUES (NULL, 'Herbert'), (NULL, 'Anneliese')
Dabei wird der Primärschlüssel id per auto_increment erhöht.
Da aber auch noch Werte importiert werden können, die in einer Untertabelle gespeichert werden, muss eine weitere DB-Abfrage folgen, z.B. so:
INSERT INTO untertabelle (id, haarfarbe) VALUES (X, 'blond'), (Y, 'rot')
wobei id der Fremdschlüssel aus der Haupttabelle ist und X und Y mit der eben vergebenen id ersetzt werden müssen!
Ich weiß, dass ich die soeben vergebene id erhalten kann, wenn ich die Anfragen einzeln durchführe, habe aber gelesen, dass bei großen Datensätzen ein Verzicht auf Einzelabfragen zu großen Leistungsverbesserungen führen kann:
http://dev.mysql.com/doc/refman/5.1/de/insert-speed.html
Daher hier meine Frage:
Gibt es eine Möglichkeit ein Array der soeben erzeugten ids zurückzubekommen oder kann man verknüpfte INSERTs ausführen (nach meiner Recherche nicht, aber vielleicht hab ich ja was übersehen?)
Moin!
Daher hier meine Frage:
Gibt es eine Möglichkeit ein Array der soeben erzeugten ids zurückzubekommen oder kann man verknüpfte INSERTs ausführen (nach meiner Recherche nicht, aber vielleicht hab ich ja was übersehen?)
Nein, gibt's nicht. Wenn du schnell EINE Tabelle füllen willst, besteht die Möglichkeit, mehr als einen Datensatz pro INSERT einzufügen, dann aber keine Möglichkeit, die erzeugten IDs jedes Datensatzes abzufragen. INSERTs in mehrere Tabellen muss immer einzeln geschehen, wenn du die erzeugten IDs brauchst.
Abgesehen davon: Mehr als ein INSERT für einen Datensatz klingt sowieso so, als ob du das als Transaktion kapseln solltest.
- Sven Rautenberg