Darf mir jemand helfen? Ich versuche etwas, aber ich bin (zu) neu zu (meinem) SQL.
Ich verwende zwei Tabellen: Elemente und Kategorien. Tabellenelemente haben ein Feld mit Fremdschlüssel: category_id.
Ich möchte, dass die Tabelle Kategorien sauber gehalten wird. Wenn also in den Kategorien kein Element der Kategorie X enthalten ist, sollte die Kategorie X aus den Kategorien gelöscht werden. Wie stellen Sie das fest? Ich vermutete mit DELETE ON CASCADE, aber bis jetzt löschte es nur die entsprechenden Elemente von Items, wenn ich eine Kategorie aus Kategorien löschte.
Vielen Dank, dass Sie mir geholfen haben!
ON DELETE CASCADE
ist eine Möglichkeit, eine Zeile zu löschen, wenn eine Zeile, auf die sie verweist, gelöscht wird. Das bedeutet:
Sie haben also Gegenstände und jeder Gegenstand gehört zu einer bestimmten Kategorie. In Ihrer Artikeltabelle haben Sie eine Kategorie-ID (und korrigieren Sie bitte Ihre Schreibweise), die auf eine Zeile in der Kategorietabelle verweist. Also, in deiner Situation:
Was Sie fragen, ist etwas anders herum:
Es gibt keine Möglichkeit, dies mit ON DELETE CASCADE
zu tun, aus zwei Gründen:
Dies alles ergibt sich aus der Tatsache, dass ON DELETE CASCADE
eine Methode ist, die referentielle Integrität beizubehalten . Das heißt, es ist eine Möglichkeit für die Datenbank, Ihnen eine starke Garantie zu geben, dass wenn Sie Kategorie # 20393 auf Element # 9847 sehen, wenn Sie nach Kategorie # 20393 suchen Sie wissen, dass es existiert . Es ist nicht ein arbeitssparendes Gerät. :) Das ist der Grund, warum die anderen Optionen ON DELETE SET NULL
und ON DELETE RESTRICT
sind: Sie garantieren auch die Integrität, aber anstatt zu löschen, entfernen sie den schlechten Verweis oder verhindern, dass das ursprüngliche Löschen auftritt.
Die Antwort ist also, dass Sie entweder einen Cron-Job schreiben müssen, um diese Tabelle regelmäßig zu bereinigen, oder eine Art von ON DELETE-Trigger verwenden, wenn Sie sich um leere Kategorien sorgen.
Tags und Links sql mysql cascading-deletes