Mysql: rekursives ausführen EINES queries
nina
- datenbank
0 Vinzenz Mai0 nina
hi,
hab 2 tabellen, wobei beim erstellen eines eintrags in beiden ein neuer datensatz dazukommt.
im ersten stehen die wichtigsten infos... die erste db gibt jedem eintrag eine id(last+1: einfach autoincrement). nun soll bei dem insert in der 2. tabelle auch noch die id des soeben in der 1. tabelle erstellten datensatzes als wert eingetragen werden. lässt sich das mit einem query beides auf einmal machen oder muss es mit 3 queries (->insert1, select -> get_id von insert1, insert2 mit der info der ermittelten neuen id) gemacht werden?
danke für hilfe
Hallo Nina,
im ersten stehen die wichtigsten infos... die erste db gibt jedem eintrag eine id(last+1: einfach autoincrement).
nun soll bei dem insert in der 2. tabelle auch noch die id des soeben in der 1. tabelle erstellten datensatzes als wert eingetragen werden. lässt sich das mit einem query beides auf einmal machen
Ja, das kannst Du. Dazu dienst LAST_INSERT_ID, schau Dir das erste SQL-Beispiel im verlinkten Abschnitt des MySQL-Handbuchs an.
Freundliche Grüße
Vinzenz
hi
kann dabei kein missverständis vorkommen?
wenn zufällig "zeitgleich", wenn es denn möglich ist,... 2 mal das script mit verschiedenen daten aufgerufen wird und danach gleich SELECT LAST_INSERT_ID(); gemacht wird... dass da was verwechselt wird. es steht ja nicht mal mit drin, von welcher tabelle die letzte id genommen wird....
ist es unmissverständlich oder ist es ein potentielles risiko?
danke
Hallo Nina,
kann dabei kein missverständis vorkommen?
Nein.
wenn zufällig "zeitgleich", wenn es denn möglich ist,... 2 mal das script mit verschiedenen daten aufgerufen wird und danach gleich SELECT LAST_INSERT_ID(); gemacht wird...
Nein, genau dafür ist LAST_INSERT_ID() da. Wie Du dem von mir verlinkten Abschnitt und der Dokumentation zu LAST_INSERT_ID() in der Funktionsliste entnehmen kannst, wird diese Information vom Datenbankmanagementsystem auf Verbindungsbasis geführt. D.h. eine andere Verbindung kann Dir nicht Deine letzte "automagisch" erzeugte ID wegschnappen.
ist es unmissverständlich oder ist es ein potentielles risiko?
Sofern Du zwischen Deinem ersten INSERT, das den Autoincrement-Wert erzeugt und dem zweiten INSERT, in dem Du mit LAST_INSERT_ID() diesen Wert nutzt, keine weiteren SQL-Statements absetzt, die einen neuen Wert für LAST_INSERT_ID() generieren, kann nichts passieren. Das hast Du auch nicht vor, Du willst ja die beiden Statements direkt hintereinander ausführen.
Auch wenn Dein Skript 10-mal parallel zueinander abgearbeitet werden würde, bekäme jeder einzelne Aufruf die genau richtige ID. Dafür ist LAST_INSERT_ID() schließlich da.
Freundliche Grüße
Vinzenz