Announcement

Collapse
No announcement yet.

on delete cascade über mehrere Tabellen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • on delete cascade über mehrere Tabellen?

    Hi, ich schreib grad an meiner Diplomarbeit und fuchtel mir hier ne DB zusammen die ~50 Tabellen hat.
    Jetzt meine ich mich dran erinnern zu können, dass ich das schonmal in einem Projekt hatte, dass on delete cascade nur über eine Tabelle ging und die dort vorhandenen on delete cascades nicht anstieß, ist das wirklich so oder hab ich mir da was falsch gemerkt?
    Also als Beispiel:
    Tabelle 1 -> FK_odc -> Tabelle 2 -> FK_odc -> Tabelle 3,
    löscht man jetzt aus Tabelle 1 einen Wert wird T2 gelöscht, aber nicht T3, hab ich das noch richtig in Erinnerung?

  • #2
    Hallo,

    also DELETE CASCADE macht nur Sinn, wenn es auch tatschächlich CASCADE ist - Sprich über ALLE Referenzen hinweg gelöscht wird. Ist DELETE CASCADE nur für Tabelle 1 -> FK_odc -> Tabelle 2 definiert und für Tabelle 2 -> FK_odc -> Tabelle 3 nicht, dann führt das Löschen eines DS in Tabelle 1 zu einer Constraintverletzung, wenn referenzierte DS in Tabelle 3 existieren.

    Da wir uns hier aber im MySQL-Forum befinden, muß ich diese Aussage dahingehend einschräncken, das MySQL referentielle Integrität nur für die InnoDB-Engine kennt. Insofern stimmt deine Aussage für MySQL teilweise.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Ja OK, es ist schon auf MySQL bezogen, klar. Und die von dir skizzierte Lösung ist genau das, was ich vorhabe. Also nur eine Verknüpfung T1 -> T2 und T2 -> T3.
      Warum wird T2-T3 nicht angestoßen, wenn von T1-T2 das Löschen stattfindet, bzw. was genau müsste ich machen? Alles manuell durchforsten?
      Oder auf InnoDB umstellen? Was hätte das für Auswirkungen, was gibts noch?
      EDIT: Ne ich hab deinen Text falsch verstanden, ich wollte delete cascade schon für alles definieren, wo es gebraucht wird

      Comment


      • #4
        Nochmal zum Verständnis:
        Drei Tabellen T1, T2, T3. T1 ist mit T2 referentiell über FK_T1_T2 verbunden und T2 mit T3 über FK_T2_T3.
        Wird FK_T1_T2 mit DELETE CASCADE definiert und FK_T2_T3 nicht, dann führt ein Löschen in T1 zum Löschen aller verbundenen DS in T2. Evtl. vorhandene Beziehungen über FK_T2_T3 verhindern das Löschen jedoch. Sind beide Constraints DELETE CASCADE findet ein Löschen über alle drei Tabellen statt.

        MySQL kennt dagegen FOREIGN KEYs nur für die InnoDB-Engine. Bei z.B. MyISAM wird die Syntax zur Erstellung war akzeptiert (es gibt keine Fehlermeldung), aber die Constraints werden nicht beachtet. Ich bin mir deshalb auch nicht sicher, ob MySQL ein DELETE CASCADE macht. Für die "richtige" Untersuchung von FKs ist MySQL deshalb ungeeignet, es sei denn InnoDB wird verwendet.

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Ah, OK, vielen Dank, dann war meine Angst also unbegründet. Ich hab mich schon ein wenig über MyISAM - InnoDB informiert und werde aufgrund der Features InnoDB nutzen und mit den Ressourcennachteilen leben (müssen).
          Vielen Dank!

          Comment

          Working...
          X