Ankündigung

Einklappen
Keine Ankündigung bisher.

DS löschen + DS mit Fremdschlüssel

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • DS löschen + DS mit Fremdschlüssel

    Hallo zusammen
    Ich habe 2 Tabellen mit 1n Beziehungen
    Tabelle 1
    Id
    Gericht
    Menge
    bla.

    Tabelle 2
    Ref_Gericht.id
    Ref_Zutat
    Menge
    Ref_Einheit
    bla...

    Mir ist so, als ob ich nun recht simpel Daten aus Tabelle 1 löschen kann und MySQL automatisch die dazugehöriegen Referenzeinträge aus Tabelle 2 löscht.

    Die Preisfrage... Wie
    Bzw.: wie sehe ich denn die Art der Beziehung? Konnte man da nicht irgendwie die Option setzen, dass Rekursiv gelöscht wird???
    Ich finds einfach nicht und ich wollte auch nicht wirklich ne komplexe Delete machen.

    Hat jemand eine Idee?
    Gruß Denis
    PS: InnoDB

    http://www.dhsmedia.de
    http://www.deutsch-im-blick.de

  • #2
    Da wird nichts automatisch gelöscht. Du musst alle Datensätze aus Tabelle 2 mit der Ref_GerichtId des zu löschenden Datensatzes aus Tabelle 1 selbst löschen.
    Aber mit komplex hat das wenig zu tun, das bedeutet lediglich eine DELETE Anweisung pro betroffener Tabelle, was bei Deinem beispiel gerade mal zwei sind, bspw.:
    Code:
    DELETE FROM tabelle1 WHERE id = 5
    DELETE FROM tabelle2 WHERE Ref_GerichtId = 5
    Im Zweifel schreibst Du Dir ne PROCEDURE oder einen TRIGGER dazu.
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Ja, mein Beispiel war jetzt stark vereinfacht.
      Ich dachte, ich kann der Beziehung irgendwie sagen, dass sie das Löschen weitergeben soll.
      Aber wie das so ist - ich weiß weder wo ichs gehört habe, noch wie ich danach suchen soll. ES wäre natürlich ziemlich elegant, dem DBS das Löschen zu überlassen, anstatt 5-7 Delets manuell auszuführen. - -Wobei die ja dann noch als Block ausgeführt werden müssen - für den Fall, dass was nich geht.
      http://www.dhsmedia.de
      http://www.deutsch-im-blick.de

      Kommentar


      • #4
        Das kann man sehr wohl automatisieren, schau dir mal ON DELETE CASCADE an
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          Nice, war mir nicht bekannt, danke.
          Competence-Center -> Enjoy the Informatrix
          PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

          Kommentar


          • #6
            PERFEKT Danke
            Die Frage zum Glück wäre noch, wie kann ich mir den Beziehungsstatus anzeigen lassen? Irgendwie muss ich ja sehen können, was ich damals beim erstellen der Beziehung mitgegeben hab. (on Delete, on Update)
            https://www.php-einfach.de/mysql-tut...emdschluessel/
            http://www.dhsmedia.de
            http://www.deutsch-im-blick.de

            Kommentar


            • #7
              Probier mal SHOW CREATE TABLE <tablename>

              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

              Kommentar


              • #8
                Anpassen auf diese Weise: https://stackoverflow.com/questions/...ction-behavior
                Competence-Center -> Enjoy the Informatrix
                PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                Kommentar


                • #9
                  Wenn ein referentielle Beziehung unter Mysql besteht, dann siehst du das mit dieser Abfrage.
                  Code:
                  SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME
                  FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
                  WHERE REFERENCED_TABLE_SCHEMA IS NOT NULL;
                  Wenn es kein Ref .Constraint gibt, aber dennoch eine Beziehung besteht, dann muss das der Programmierer berücksichtigen, das DBMS ist damit raus.

                  Kommentar


                  • #10
                    Ganz hilfreich um einen Überblick zu bekommen.
                    Code:
                    "TABLE_SCHEMA"    "TABLE_NAME"    "COLUMN_NAME"    "CONSTRAINT_NAME"
                    "test"             "child"         "parent_id"      "child_ibfk_1"
                    Doch wenn es ein Ref .Constraint gibt besagt das doch noch lange nichts aus über die Kaskaden-Aktionen aus welche automatisch ablaufen sollen. Dafür ist dann wie von lstegelitz gezeigt noch ein
                    Code:
                     
                     SHOW CREATE TABLE test.child
                    notwendig, um den gesamten CONSTRAINT zu sehen.

                    Kommentar


                    • #11
                      vielen tausend Dank!!
                      Ich finds ja schon lustig, dass der PHPmyAdmin grafisch an seine Grenzen kommt. - Das hatte ich so auch noch nicht. Aber bei inziwschen 40 Beziehungen stellt er die Striche nun nicht mehr dar.
                      http://www.dhsmedia.de
                      http://www.deutsch-im-blick.de

                      Kommentar


                      • #12
                        Du kannst auch einen anderen Client zur Bearbeitung nehmen zB: HeidiSQL, oder etwas schwerer MySQLWorkbench, da kann man das auch nett visualisierenlassen mit den Beziehungen: zB: https://youtu.be/X_umYKqKaF0?t=470
                        The string "()()" is not palindrom but the String "())(" is.

                        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                        PHP.de Wissenssammlung | Kein Support per PN

                        Kommentar


                        • #13
                          Das ist ja genial.
                          Danke. Bei so vielen Tabellen ist eine gute visualisierung echt hilfreich.
                          http://www.dhsmedia.de
                          http://www.deutsch-im-blick.de

                          Kommentar

                          Lädt...
                          X