Insert in 2 Tabellen

Katzenbauer

Erfahrenes Mitglied
Ich habe 2 Tabellen, die über eine Id miteinander verknüpft sind. Nun möchte ich mit einem Query etwas in die eine einfügen und brauche dan direkt die Id, die durch auto_increment erzeugt wird für die Verknüpfung in der 2. Tabelle.

Wenn man einen normalen joint ähh join nimmt kann man zwar 2 Tabellen abfragen aber nicht in 2 einfügen, oder irre ich mich da?
 
Die ID erhältst Du durch Abfrage der Funktion LAST_INSERT_ID() direkt im Anschluss an Deine erste Einfüge-Operation.

Gruß hpvw

EDIT Beispiel:
SQL:
insert into table1 set field='value';
insert into table2 set foreignKey=LAST_INSERT_ID();
 
Hier habe ich eine Anmerkung / Frage: Es kommt sicher auf den Kontext an, aber in einer Mehrbenutzerumgebung (zB Internet-Applikation) könnte doch im worst case eine anderes parallel verarbeitetes Statement hier in die Quere kommen, da es sich offensichtlich nicht um eine atomare Aktion handelt.
Frage also: LAST_INSERT_ID transaktionssicher ?

Gruß
Codago
 
Die Funktion ist in sofern transaktionssicher, als dass sie sich auf die aktive Verbindung bezieht. Ein anderer Benutzer, zum Beispiel einer Internetseite in einem PHP-Skript kann Dir also nicht dazwischen kommen.
Anders sieht es bei Applikationen mit Nebenläufigkeiten aus. Eine Anwendung, zum Beispiel in Java geschrieben, die mit mehreren in die Datenbank schreibenden Threads und einer, beispielsweise als Singleton implementierten, einzigen Datenbankklasse arbeitet, auf die alle Threads zugreifen, kann Inkonsistenzen hervorrufen.

Gruß hpvw
 
Danke hpvw, das klärt einiges.
Der unwahrscheinliche Fall ist halt immer der, der zu den unerklärlichsten Effekten führt. Deswegen sollte man beim Design gleich drauf achten, solche pitfalls zu vermeiden.
 
Zurück