Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como excluir a cascata quando parentID e childID estão na mesma tabela?


Você só precisa garantir que configurou uma chave estrangeira da linha filho para seu pai, com o ON DELETE CASCASDE opção definida na chave estrangeira. Isso funciona tão bem para uma tabela de auto-referência quanto para referências em tabelas separadas. Para excluir a árvore, basta excluir o nó pai. Todas as linhas filhas serão excluídas sumariamente.

por exemplo. Dado:
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);

Podemos remover toda a primeira árvore simplesmente excluindo o nó raiz:
DELETE FROM MYTable WHERE ID = 1;

SqlFiddle do mesmo

Observe, no entanto, que nos Documentos que há um limite para a profundidade de CASCADE exclui: