sql >> Database >  >> RDS >> Mysql

Hoe cascade te verwijderen wanneer parentID en childID in dezelfde tabel staan?

U hoeft er alleen voor te zorgen dat u een externe sleutel hebt ingesteld van de onderliggende rij naar de bovenliggende rij, met de ON DELETE CASCASDE optie ingesteld op de externe sleutel. Dit werkt even goed voor een zelfverwijzende tabel als voor verwijzingen in afzonderlijke tabellen. Om de boom te verwijderen, verwijdert u eenvoudig het bovenliggende knooppunt. Alle onderliggende rijen worden in het kort verwijderd.

bijv. Gegeven:

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

We kunnen de hele eerste boom verwijderen door simpelweg het wortelknooppunt te verwijderen:

DELETE FROM MYTable WHERE ID = 1;

SqlFiddle van hetzelfde

Merk echter op dat uit de Documenten dat er een limiet is aan de diepte van CASCADE verwijdert:



  1. Meer van mijn favoriete PostgreSQL-query's - en waarom ze er ook toe doen

  2. EXTRACT (datetime) Functie in Oracle

  3. Oracle 11g - Hoe kan ik langzame parallelle invoegselectie optimaliseren?

  4. Hoe maak ik een weergave in MySQL?