Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie lösche ich die Kaskade, wenn sich parentID und childID in derselben Tabelle befinden?

Sie müssen nur sicherstellen, dass Sie mit ON DELETE CASCASDE einen Fremdschlüssel von der untergeordneten Zeile zu ihrer übergeordneten Zeile eingerichtet haben Option auf dem Fremdschlüssel gesetzt. Dies funktioniert bei einer selbstreferenzierenden Tabelle genauso gut wie bei Referenzen in separaten Tabellen. Um den Baum zu löschen, löschen Sie einfach den übergeordneten Knoten. Alle untergeordneten Zeilen werden summarisch gelöscht.

z.B. Gegeben:

CREATE TABLE MyTable
(
  ID INT NOT NULL PRIMARY KEY,
  ParentID INT  NULL,
  CONSTRAINT FK_MT_Parent FOREIGN KEY (ParentID) REFERENCES MyTable(ID) ON DELETE CASCADE
);

-- And inserting two trees of data:
-- 1-2-3
--   └-4
-- 10 - 11
INSERT INTO MyTable(ID,ParentID) VALUES
    (1,null), (2,1), (3,2), (4,2),
    (10,null), (11,10);

Wir können den gesamten ersten Baum entfernen, indem wir einfach den Wurzelknoten löschen:

DELETE FROM MYTable WHERE ID = 1;

SqlFiddle desselben

Beachten Sie jedoch, dass aus den Docs dass die Tiefe von CASCADE begrenzt ist löscht: