sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo eliminar la cascada cuando parentID y childID están en la misma tabla?

Solo debe asegurarse de haber configurado una clave externa desde la fila secundaria hasta su principal, con ON DELETE CASCASDE opción establecida en la clave externa. Esto funciona igual de bien en una tabla autorreferenciada que en referencias en tablas separadas. Para eliminar el árbol, simplemente elimine el nodo principal. Todas las filas secundarias se eliminarán sumariamente.

p.ej. 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 eliminar todo el primer árbol simplemente eliminando el nodo raíz:

DELETE FROM MYTable WHERE ID = 1;

SqlFiddle del mismo

Sin embargo, tenga en cuenta que desde los Docs que hay un límite a la profundidad de CASCADE elimina: