Какое поведение по умолчанию при удалении записи, на которую ссылается внешний ключ в Oracle Database?

«Какое поведение по умолчанию при удалении записи, на которую ссылается внешний ключ в Oracle Database?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Oracle Database по умолчанию для внешнего ключа устанавливается ограничение NO ACTION (хотя в документации оно часто синонимично RESTRICT). Это означает, что операция DELETE в родительской таблице будет отклонена, если существуют зависимые записи в дочерней таблице.

Пример создания таблиц с поведением по умолчанию:

CREATE TABLE departments (
    dept_id NUMBER PRIMARY KEY
);

CREATE TABLE employees (
    emp_id NUMBER PRIMARY KEY,
    dept_id NUMBER REFERENCES departments(dept_id) -- ON DELETE NO ACTION по умолчанию
);
-- Попытка удалить отдел с сотрудниками вызовет ошибку ORA-02292.

Альтернативные варианты, которые можно задать явно:

  • ON DELETE CASCADE: автоматическое каскадное удаление зависимых записей.
  • ON DELETE SET NULL: установка NULL в столбце внешнего ключа у зависимых записей.