Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak usunąć kaskadę, gdy parentID i childID znajdują się na tej samej tabeli?

Musisz tylko upewnić się, że ustawiłeś klucz obcy z wiersza podrzędnego do jego rodzica, z ON DELETE CASCASDE opcja ustawiona na kluczu obcym. Działa to równie dobrze w przypadku tabel samoodwołujących się, jak w przypadku odwołań w osobnych tabelach. Aby usunąć drzewo, po prostu usuń węzeł nadrzędny. Wszystkie wiersze podrzędne zostaną natychmiast usunięte.

np. Biorąc pod uwagę:

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

Możemy usunąć całe pierwsze drzewo, po prostu usuwając węzeł główny:

DELETE FROM MYTable WHERE ID = 1;

SqlFiddle tego samego

Pamiętaj jednak, że z Dokumentów że istnieje limit głębokości CASCADE usuwa:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pusta lista parametrów klauzuli IN w MySQL

  2. MySQL:jak indeksować klauzulę OR

  3. użyj tego samego wyzwalacza dla różnych tabel

  4. Używanie SQLAlchemy ORM dla klucza innego niż podstawowy, unikalny, automatycznie zwiększający się identyfikator

  5. Jak wygenerować UUIDv4 w MySQL?