undso: Instert Into über mehrere Tabellen

Hallo liebes Forum,
leider wieder eine Datenbankspezifische Frage.

Ich muss immer eine Zeile in mehrere Tabellen einfügen. Ist das mit einer Query möglich?

Insert Into tabelle1, tabelle2 (spalte1) values (12345);

Grüße

  1. Hallo,

    Ich muss immer eine Zeile in mehrere Tabellen einfügen.

    das bedeutet, dass mit hoher Wahrscheinlichkeit Dein Tabellendesign sehr
    verbesserungswürdig ist.

    Ist das mit einer Query möglich?
    Insert Into tabelle1, tabelle2 (spalte1) values (12345);

    welches Datenbankmanagementsystem (DBMS) in welcher genauen Version verwendest Du?

    [ ] Access
    [ ] dBase/FoxPro
    [ ] DB2
    [ ] Firebird
    [ ] Informix
    [ ] MS SQL Server
    [ ] MySQL
    [ ] Oracle
    [ ] PostgreSQL
    [ ] SQLite
    [ ] eines der vielen, die ich hier nicht aufgezählt habe

    Selbstverständlich sollte Dir ein Blick ins Handbuch sagen, was Sache ist,
    z.B. für MySQL:

    http://dev.mysql.com/doc/refman/5.0/en/insert.html

    Findest Du dort eine Syntaxversion, die Deinem Wunsch nahekommt? Ich nicht.

    Freundliche Grüße

    Vinzenz

    1. Hi,

      ich denke das geht bei manchen Sonderlingen, standardisiert ist das nicht ... is auch nicht noetig. Zwei Tabellen, zwei queries.

      Aber wie mein Vorredner schon sagte, die Tatsache dass du in zwei Tabellen schreibst heisst evtl. dass du Daten getrennt hast, die du nicht trennen musst.

      Eine andere Loesung waere evtl. ein Trigger ...

      Viel Erfolg

    2. hi,

      Ich muss immer eine Zeile in mehrere Tabellen einfügen.

      das bedeutet, dass mit hoher Wahrscheinlichkeit Dein Tabellendesign sehr
      verbesserungswürdig ist.

      welches Datenbankmanagementsystem (DBMS) in welcher genauen Version verwendest Du?
      [x] MySQL

      Findest Du dort eine Syntaxversion, die Deinem Wunsch nahekommt? Ich nicht.

      Ja, ich finde dort auch nichts, dann wohl am besten zwei Queries.
      Wegen dem Verbesserungsbedürftig.
      Ich hatte eine einzige Tabelle mit allen Userdaten (auch Profilangaben, Singleangaben und so) Alles in einer Tabelle. Waren ca. 200 Spalten *smile*
      Habe das jetzt auf mehrere Tabellen aufgeteilt, sprich, etwas normalisiert und deshalb müsste ich bei einer Neuregistrierung in mehrere Tabellen für ein neues Mitglied eine Zeile anlegen.

      Grüße

      1. Hallo

        Ich muss immer eine Zeile in mehrere Tabellen einfügen.

        das bedeutet, dass mit hoher Wahrscheinlichkeit Dein Tabellendesign sehr
        verbesserungswürdig ist.
        welches Datenbankmanagementsystem (DBMS) in welcher genauen Version verwendest Du?
        [x] MySQL

        Ich wiederhole: welche *genaue* Serverversion?

        Ja, ich finde dort auch nichts, dann wohl am besten zwei Queries.
        Wegen dem Verbesserungsbedürftig.
        Ich hatte eine einzige Tabelle mit allen Userdaten (auch Profilangaben, Singleangaben und so) Alles in einer Tabelle. Waren ca. 200 Spalten *smile*
        Habe das jetzt auf mehrere Tabellen aufgeteilt, sprich, etwas normalisiert und deshalb müsste ich bei einer Neuregistrierung in mehrere Tabellen für ein neues Mitglied eine Zeile anlegen.

        Dein Versuch der "Normalisierung" scheint etwas schiefgegangen zu sein.

        Wobei sich das dann besser beurteilen ließe, wenn Du ein paar Tabellen
        inklusive ein paar Beispieldaten vorstellen würdest. Jedenfalls entgeht
        mir die Notwendigkeit, bei Neuanlage eines Datensatzes gleich noch ein
        paar weitere anzulegen. Ich vermute, dass es nicht erforderlich wäre.

        Und ja, dafür könnte man auch einen INSERT-Trigger verwenden. Es gibt doch
        tatsächlich inzwischen verbreitete Unterstützung dafür (5.0.x oder höher).

        Deswegen wiederhole ich nochmals das, was Du sowieso schon bei Deinem
        Ausgangsposting einfach ignoriert hast:

        Bei Datenbankfragen ist es stets eine gute Idee, das verwendete DBMS in
        der verwendeten Version anzugeben. Bitte hole das nach. Bitte füge diese
        Information bei künftigen Threads im Bereich Datenbanken gleich im ersten
        Beitrag ein.

        Freundliche Grüße

        Vinzenz

        1. Hi,

          Ich wiederhole: welche *genaue* Serverversion?

          Tut mir Leid. mySQL 5.0.15

          Dein Versuch der "Normalisierung" scheint etwas schiefgegangen zu sein.

          Wobei sich das dann besser beurteilen ließe, wenn Du ein paar Tabellen
          inklusive ein paar Beispieldaten vorstellen würdest. Jedenfalls entgeht
          mir die Notwendigkeit, bei Neuanlage eines Datensatzes gleich noch ein
          paar weitere anzulegen. Ich vermute, dass es nicht erforderlich wäre.

          Bsp:

          Tabelle User

          ID, Name, Mail, Geschlecht, Passwort, PLZ, Wohnort, Punkte, IP, Onlinestatus, SESSION, usw. (ca.30 Spalten die ich

          Beispieleintrag:

          123, Heinz, blabla@web.de, 2, abcde, 89050....

          Damals war alles in der Tabelle User drin. Weil viele gemeint haben, das wären zu viele Spalten, habe ich das ganze aufgeteilt.

          Tabelle Userprofil:

          ID, Hobbies, Motto, IchMag, IchMagNicht, FavoriteLink, MitgliedSeit, ICQ, Sport, Sternzeichen... (ca. 30 Spalten - Diese Spalten waren früher noch in der Tabelle User drin)

          Beim registrieren wollte ich nun in diese Tabelle den Zeile

          123, , , Anlegen. Die Spalten blieben dann leer.

          Zudem habe ich noch ein paar neue Tabellen angelegt, für die dasselbe gilt.

          Tabelle USersingleanzeige

          ID, IchSuche, Größe, Gewicht, Haarfarbe ... (ca. 20 Spalten)

          Und ja, dafür könnte man auch einen INSERT-Trigger verwenden. Es gibt doch

          Insert-Trigger. Das sagt mir jetzt garnichts, werde aber sicherlich schlau, wenn ich die Doku durchsuche oder google.

          Grüße

          1. Hallo,

            Tut mir Leid. mySQL 5.0.15

            danke für die Info.

            Dein Versuch der "Normalisierung" scheint etwas schiefgegangen zu sein.

            ja, Dein Versuch ist etwas schiefgegangen.

            Tabelle User

            ID, Name, Mail, Geschlecht, Passwort, PLZ, Wohnort, Punkte, IP, Onlinestatus, SESSION, usw. (ca.30 Spalten die ich

            Beispieleintrag:

            123, Heinz, blabla@web.de, 2, abcde, 89050....

            Damals war alles in der Tabelle User drin. Weil viele gemeint haben, das wären zu viele Spalten, habe ich das ganze aufgeteilt.

            Das ist ein miserables Argument. Wenn die Spalten erforderlich sind, dann
            sind sie erforderlich.

            Tabelle Userprofil:

            ID, Hobbies, Motto, IchMag, IchMagNicht, FavoriteLink, MitgliedSeit, ICQ, Sport, Sternzeichen... (ca. 30 Spalten - Diese Spalten waren früher noch in der Tabelle User drin)

            das tut weh. Das tut sehr weh. Dein Tabellendesign taugt wenig.

            Beispiele:

            Hobbies
            IchMag
            IchMagNicht
            Sport

            und Vergleichbares hat nichts, gar nichts, überhaupt gar nichts in dieser
            Tabelle verloren. Das ist miserabelstes Tabellendesign.

            Eine Person kann mehrere Hobbies haben, verschiedene Personen können das
            gleich Hobby haben. Das ist eine typische n:m-Verknüpfung, für die Du die
            Tabellen für

            - Personen
             - Hobbies
             - die Zuordnung von Hobby zu Person

            benötigst. Es ist eine ganz schlechte Idee, in solche Spalten kommagetrennte
            Listen zu speichern. Ganz bestimmt willst Du doch überprüfen, wer ähnlich
            Vorlieben und Abneigungen hat. Geht das mit Freitext oder kommagetrennten
            Listen. Nur mit Aufwand. Mach' es also richtig.

            Beim registrieren wollte ich nun in diese Tabelle den Zeile

            123, , , Anlegen. Die Spalten blieben dann leer.

            Verzichte solange auf einen Eintrag in der Tabelle, bis auch endlich Inhalt
            dafür da ist.

            Grundsätzlich solltest Du beim Datenbankdesign am besten von vorn anfangen.
            Du hast eine ziemlich genaue Vorstellung, welche Daten Du speichern möchtest.
            Versuche zu erkennen, welche Entitätstypen Du hast, welche Eigenschaften
            diese Entitätstypen haben und wie die Beziehungen der Entitätstypen
            untereinander sind (siehe oben Personen und Hobbies).

            Aus dem Entity-Relationship-Modell, das Du erstellt hast, sollte sich Dein
            Tabellendesign sehr leicht ableiten lassen :-)

            Bitte denke daran, dass Fehler, die Du beim Tabellendesign machst, sich später
            nur sehr schwer korrigieren lassen. Daher: Mach' es richtig!

            Freundliche Grüße

            Vinzenz

            1. Hi,

              Das ist ein miserables Argument. Wenn die Spalten erforderlich sind, dann
              sind sie erforderlich.

              Oki, dann habe ich das wohl falsch verstanden.

              Das ist miserabelstes Tabellendesign.

              Eine Person kann mehrere Hobbies haben, verschiedene Personen können das
              gleich Hobby haben. Das ist eine typische n:m-Verknüpfung, für die Du die
              Tabellen für

              • Personen
              • Hobbies
              • die Zuordnung von Hobby zu Person

              benötigst. Es ist eine ganz schlechte Idee, in solche Spalten kommagetrennte
              Listen zu speichern. Ganz bestimmt willst Du doch überprüfen, wer ähnlich
              Vorlieben und Abneigungen hat. Geht das mit Freitext oder kommagetrennten
              Listen. Nur mit Aufwand. Mach' es also richtig.

              Oki, mein Problem war, dass ich alle Eingaben als Freitext den Mitgliedern ermöglich habe.
              Nach dem Schema könnte ich einige Punkte realisieren. Zwar net alles, da man einige dennoch als Freitext lassen muss.

              Später beim Auslesen des Profils müsste ich dann mit einigen Tabellen Joinen, wenn ich das mit mehreren Punkte mache: Hobbies, Nationalität, Sprachen, Kinder, Familienstand, Beruf...

              Ich fange dann mal gleich an, solch eine Struktur, wie von dir gerade vorgeschlagen, nachzugehen.

              Was mir gerade so spontan einfällt.
              Wenn ich später ein paar Daten in ein Array lade.

              Bsp. Username, Hobbie und Nationalität.

              Tabelle User:
              userID 123
              Name Heinz

              Tabelle Hobbies
              hobbyID 1
              Hobbyname Fußball
              hobbyID 2
              Hobbyname Tennis

              Tabelle Hobbiezuordnung
              useridID 123
              hobbyID 1

              So ähnlich mit Nationalität:

              Früher als alles in einer Tabelle drin war, hätte ich diese drei Angaben von der Tabelle "User" abgefragt.

              String[] userarray="select name, hobby, nationalitaet from User where userID=123;";

              Jetzt müsste ich einige Joins machen um auf die Daten zurückzugreifen. Ja gut, mit Joins komme ich einwenig zurecht.
              Meine Befürchtung nun so spontan, was mache ich, wenn der User jetzt keinen Eintrag in der Tabelle "Hobbiezuordnung" hat.
              Nach der alten Struktur hätte ich einen leeren Array[1], aber immer 3 Arrayfelder.

              Beim Join jetzt, sobald kein Hobby eingetragen ist, habe ich nur noch 2 Arrayfelder. Username und Nationalität.

              Nationalität hat sich verschoben und das dritte Arrayfeld wäre nicht da. Jetzt müsste ich mir mal überlegen, wie ich das ganze dann ausgebe. Vielleicht denke ich einfach gerade nur kompliziert ;)

              Aus dem Entity-Relationship-Modell, das Du erstellt hast, sollte sich Dein
              Tabellendesign sehr leicht ableiten lassen :-)

              Bitte denke daran, dass Fehler, die Du beim Tabellendesign machst, sich später
              nur sehr schwer korrigieren lassen. Daher: Mach' es richtig!

              Oki danke, ich werde mich darum bemühen und mich anstrengen ;)

              Grüße

      2. Hi,

        Normalisieren heisst nicht Tabellen teilen.

        Schau auf Wikipedia nach, da findest das wichtigste in Kuerze, bzw. google, und du findest genug.

        1. Normalform is ja easy: Keine Tupel in einer Tabellenzelle, sprich sowas ist nicht erlaubt:

        IchMag = "Mich, Dich, normalisierte Relationen"

        Die ist mal Pflicht!

        Und die 2. und 3. zu beruecksichtigen leg ich dir auch ans Herz.

        Das ist eine Menge Aufwand, aber es wird noch mehr Aufwand wenn du dein Design so laesst wie es ist.

        Viel Erfolg

        1. Hi,

          IchMag = "Mich, Dich, normalisierte Relationen"

          Die ist mal Pflicht!

          Und die 2. und 3. zu beruecksichtigen leg ich dir auch ans Herz.

          Das ist eine Menge Aufwand, aber es wird noch mehr Aufwand wenn du dein Design so laesst wie es ist.

          Ah ja. So meint man das mit der Normalform.
          Danke für den Tipp, ich werde mich die Tage etwas schlau machen und die ganze Struktur überarbeiten. Meine Fragen dazu schreibe ich als Antwort auf Vinzenz's Eintrag.

          Grüße