nina: Mysql: rekursives ausführen EINES queries

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

  1. 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

    1. 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

      1. 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