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

Hvordan sletter man kaskade, når forældre-id og barn-id er på samme bord?

Du skal bare sikre dig, at du har konfigureret en fremmednøgle fra den underordnede række til dens overordnede, med ON DELETE CASCASDE indstilling indstillet på fremmednøglen. Dette fungerer lige så godt som en selvrefererende tabel som for referencer i separate tabeller. For at slette træet skal du blot slette den overordnede node. Alle underordnede rækker vil blive slettet.

for eksempel. Givet:

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

Vi kan fjerne hele det første træ ved blot at slette rodnoden:

DELETE FROM MYTable WHERE ID = 1;

SqlFiddle of same

Bemærk dog, at fra Docs at der er en grænse for dybden af ​​CASCADE sletter:



  1. Opdater din PostgreSQL-adgangskode i Linux

  2. Rekursiv underforespørgsel med sortering

  3. Sådan repareres en beskadiget adgangsdatabase

  4. Sådan løses ORA-02014:kan ikke vælge TIL OPDATERING fra visning med DISTINCT, GROUP BY