Mysql
 sql >> Database >  >> RDS >> Mysql

Come eliminare la cascata quando parentID e childID si trovano sulla stessa tabella?

Devi solo assicurarti di aver impostato una chiave esterna dalla riga figlio al suo genitore, con il ON DELETE CASCASDE opzione impostata sulla chiave esterna. Funziona altrettanto bene con una tabella autoreferenziale come con i riferimenti in tabelle separate. Per eliminare l'albero, è sufficiente eliminare il nodo padre. Tutte le righe secondarie verranno eliminate in modo sommario.

per esempio. Dato:

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);

Possiamo rimuovere l'intero primo albero semplicemente eliminando il nodo radice:

DELETE FROM MYTable WHERE ID = 1;

SqlFiddle dello stesso

Si noti tuttavia che dai Documenti che esiste un limite alla profondità di CASCADE elimina: