Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да изтрия каскада, когато parentID и childID са в една и съща таблица?

Просто трябва да се уверите, че сте настроили външен ключ от дъщерния ред към неговия родител, с ON DELETE CASCASDE опция, зададена на външния ключ. Това работи еднакво добре със самореферентна таблица, както и с препратки в отделни таблици. За да изтриете дървото, просто изтрийте родителския възел. Всички дъщерни редове ще бъдат изтрити обобщено.

напр. Дадено:

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

Можем да премахнем цялото първо дърво, като просто изтрием основния възел:

DELETE FROM MYTable WHERE ID = 1;

SqlFiddle на същото

Имайте предвид обаче, че от Документите че има ограничение за дълбочината на CASCADE изтрива:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създаване на потребител в MySQL

  2. Проверка на таблица за припокриване на времето?

  3. Разлики в седмици между PHP и MySQL

  4. Как да използвате множество бази данни в Laravel

  5. PHP добавя наклонени черти, sql инжекция все още е валидна?