sql >> Databáze >  >> RDS >> Mysql

Jak odstranit kaskádu, když jsou parentID a childID ve stejné tabulce?

Musíte se pouze ujistit, že jste nastavili cizí klíč z podřízeného řádku do jeho nadřazeného řádku pomocí příkazu ON DELETE CASCASDE možnost nastavená na cizím klíči. To funguje stejně dobře jako samoodkazovací tabulka i odkazy v samostatných tabulkách. Chcete-li strom odstranit, jednoduše odstraňte nadřazený uzel. Všechny podřízené řádky budou souhrnně smazány.

např. Vzhledem k:

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

Můžeme odstranit celý první strom jednoduchým odstraněním kořenového uzlu:

DELETE FROM MYTable WHERE ID = 1;

SqlFiddle stejného

Upozorňujeme však, že z Dokumenty že existuje omezení hloubky CASCADE smaže:



  1. SQL Server chybí index

  2. Aktualizace primárního klíče MySQL

  3. Nezpracovaný dotaz na relevanci v Laravelu. jak to zvládnout?

  4. Je možné migrovat z Realmu do Sqlite?