sql >> Databasteknik >  >> RDS >> Mysql

Hur tar man bort kaskad när föräldra-ID och barn-ID finns på samma bord?

Du behöver bara se till att du har ställt in en främmande nyckel från den underordnade raden till dess överordnade, med ON DELETE CASCASDE alternativ inställt på den främmande nyckeln. Detta fungerar lika bra som en självreferenstabell som för referenser i separata tabeller. För att ta bort trädet, radera helt enkelt den överordnade noden. Alla underordnade rader kommer att raderas summariskt.

t.ex. 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 ta bort hela det första trädet genom att helt enkelt ta bort rotnoden:

DELETE FROM MYTable WHERE ID = 1;

SqlFiddle of same

Observera dock att från Dokumenten att det finns en gräns för djupet av CASCADE tar bort:



  1. Hur returnerar man en resultatuppsättning/markör från ett anonymt Oracle PL/SQL-block som kör Dynamic SQL?

  2. SQL VÄLJ AVG

  3. MySQL GROUP BY med preferens

  4. Prestanda överraskningar och antaganden:DATEADD