Ergebnis 1 bis 6 von 6
  1. #1
    Fortgeschrittener
    Registriert seit
    18.10.2011
    Beiträge
    40

    Standard INSERT INTO über mehrere Tabellen

    Moin,

    ich möchte Eingaben einer Eingabemaske in einer DB speichern.
    Kurzes Beispiel:
    TabA -> ID, Name, und weitere Columns
    TabB -> ID (primary key), ISBN, ID_A (Referenz auf ID in TabA)
    TabC -> ID, Zusatzname

    Ich möchte alle COlumns aus TabA füllen, aus TabB nur die ISBN und aus TabC nur den Zusatznamen.

    Wie gehe ich da vor? Das LAden der Daten in die Maske mit Select funktioniert, aber insert und Update klappt nicht. Muss ich die Befehle mit Select kombinieren?

  2. #2
    Moderator Avatar von Jut4h.tm
    Registriert seit
    25.06.2006
    Beiträge
    792

    Standard AW: INSERT INTO über mehrere Tabellen

    Du machst einfach 3 inserts, das ist für den Anfang doch okay.
    1. insert TabA
    2. Last insert id auslesen
    3. insert TabB
    4. insert TabC

  3. #3
    Be root - Use Linux Avatar von H4x0r007
    Registriert seit
    27.06.2007
    Beiträge
    1.878

    Standard AW: INSERT INTO über mehrere Tabellen

    Ich würde die verschiedenen Inserts auf jeden Fall in eine Transaktion packen, denn nach dem ersten Insert und vor den nachfolgenden ist die Datenbank in einem inkonsistenten Zustand. Man muss bei einer Datenbank immer damit rechnen, dass ein anderer Prozess gerade diese Daten lesen möchte.

    Ich wusste bisher auch nicht, wie das in MySQL funktioniert, weil ich die Funktion LAST_INSERT_ID() nicht kannte. Auf Stackoverflow habe ich allerdings dieses Snippet gefunden:
    Code:
    BEGIN;
    INSERT INTO users (username, password)
      VALUES('test', 'test');
    INSERT INTO profiles (userid, bio, homepage) 
      VALUES(LAST_INSERT_ID(),'Hello world!', 'http://www.stackoverflow.com');
    COMMIT;
    BEGIN und COMMIT begrenzen die Transaktion und zwischendrin kannst du deine Inserts machen. Während der Transaktion kann kein anderer Nutzer der Datenbank auf die noch inkonststenten Daten zugreifen.

    //edit: Du könntest vermutlich auch zuerst in einem Query die Transaktion beginnen und einen Insert ausführen, dir in PHP die insert_id merken und später die anderen Queries per PHP-Befehl absetzen. Denke nur an das COMMIT; am Ende
    Geändert von H4x0r007 (20.04.2017 um 10:54 Uhr)
    Bald 14 Jahre auf Free-Hack. Krass wie die Zeit vergeht...
    "Drei Dinge sind unendlich - das Universum, die menschliche Dummheit und die WinRAR-Testversion"

  4. #4
    Trojaner Avatar von 24ds
    Registriert seit
    13.11.2011
    Beiträge
    56

    Standard AW: INSERT INTO über mehrere Tabellen

    könntest du mal die Relationen aufzeigen?
    So wie du es beschrieben hast, ist C nicht in Relation zu A oder B, B in relation zu A (und umgekehrt).

    In dem Fall macht es gar keinen Sinn, einen Insert auf 3 Tabellen zu machen. Du kannst aber mit "returning" wenigstens auf 2 Statements runter.
    Oder du baust dir eine stored procedure SP_ins_taba_b_c_(Name, weitere_columns, ISBN, Zusatzname), die im Kern das macht was H4x0r007 tut (nur nicht so hässlich )

  5. #5
    Fortgeschrittener
    Registriert seit
    18.10.2011
    Beiträge
    40

    Standard AW: INSERT INTO über mehrere Tabellen

    Erest einmal danke für die bisherigen Lösungsvorschläge. Mit 3 Inserts habe ich es tatsächlich versucht, aber ohne Erfolg.

    Zu den Relationen
    TabB hat eine ID als Primary Key, und eine Relation zu TabA über eine ID.
    TabA hat eine ID und eine ID_B. Über ID_B ist die Relation von Tab_B implementiert. Des Weiteren besitzt TabA eine ID_C.
    TabC hat eine ID und einen Namen. Hier soll die Relation über die ID und ID_C aus TabA hergestellt werden. Ich hoffe es ist etwas verständlich.


    Ursprünglich hatte ich gedacht, dass es mit einem oder zwei inserts kombiniert mit select getan ist. Scheinbar doch.

  6. #6
    Fortgeschrittener
    Registriert seit
    18.10.2011
    Beiträge
    40

    Standard AW: INSERT INTO über mehrere Tabellen

    Ich habe mal die Tabellen aufgemalt und angehängt. Die eingekreisten IDs stehen auch in Relation zueinander.


Ähnliche Themen

  1. INSERT INTO
    Von NetteMann im Forum SQL
    Antworten: 2
    Letzter Beitrag: 15.10.2007, 13:31

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •