Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment supprimer la cascade lorsque parentID et childID sont sur la même table ?

Vous devez juste vous assurer que vous avez configuré une clé étrangère de la ligne enfant à son parent, avec le ON DELETE CASCASDE option définie sur la clé étrangère. Cela fonctionne aussi bien avec une table auto-référençante qu'avec des références dans des tables séparées. Pour supprimer l'arborescence, supprimez simplement le nœud parent. Toutes les lignes enfants seront supprimées sommairement.

par exemple. Donné :

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

On peut supprimer l'intégralité du premier arbre en supprimant simplement le nœud racine :

DELETE FROM MYTable WHERE ID = 1;

SqlFiddle de même

Notez cependant que depuis les Docs qu'il y a une limite à la profondeur de CASCADE supprime :