Что такое каскадное удаление (ON DELETE CASCADE) в SQL?

«Что такое каскадное удаление (ON DELETE CASCADE) в SQL?» — вопрос из категории Базы данных и SQL, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Каскадное удаление — это опция ограничения внешнего ключа (FOREIGN KEY) в реляционных базах данных. При её использовании удаление записи из родительской (главной) таблицы автоматически приводит к удалению всех связанных с ней записей в дочерней (подчинённой) таблице.

Цель и пример:

Гарантирует ссылочную целостность данных, предотвращая появление "висячих" ссылок (orphaned records) в дочерней таблице.

-- Родительская таблица
CREATE TABLE Customers (
    CustomerID INT PRIMARY KEY,
    Name VARCHAR(100)
);

-- Дочерняя таблица с каскадным удалением
CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    CustomerID INT,
    OrderDate DATE,
    FOREIGN KEY (CustomerID)
        REFERENCES Customers(CustomerID)
        ON DELETE CASCADE -- Ключевая опция
);

Что произойдёт:

DELETE FROM Customers WHERE CustomerID = 123;

Эта команда удалит клиента с ID 123 из таблицы Customers и все его заказы из таблицы Orders.

Альтернативы и важные замечания:

  • ON DELETE SET NULL: Внешний ключ в дочерней таблице устанавливается в NULL.
  • ON DELETE SET DEFAULT: Внешний ключ устанавливается в значение по умолчанию.
  • ON DELETE NO ACTION / RESTRICT: Удаление родительской записи запрещено, если существуют зависимые дочерние записи (стандартное поведение во многих СУБД).
  • Осторожность: CASCADE может привести к масштабной и неожиданной потере данных. Всегда проверяйте связи перед выполнением удаления.