Ответ
Если правило ON DELETE не указано явно, поведение по умолчанию зависит от СУБД, но чаще всего оно эквивалентно ON DELETE NO ACTION (в некоторых СУБД, например, старых версиях MySQL, это мог быть RESTRICT).
ON DELETE NO ACTION означает:
- Удаление записи из родительской таблицы будет запрещено, если на нее ссылается хотя бы одна запись из дочерней таблицы.
- Операция завершится ошибкой нарушения целостности внешнего ключа.
Пример и результат:
CREATE TABLE departments (
id INT PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(id) -- Правило ON DELETE не задано
);
INSERT INTO departments (id, name) VALUES (1, 'IT');
INSERT INTO employees (id, name, dept_id) VALUES (10, 'Alice', 1);
-- Эта команда ВЫЗОВЕТ ОШИБКУ:
DELETE FROM departments WHERE id = 1;
-- Ошибка: Cannot delete or update a parent row: a foreign key constraint fails
Чтобы удалить родительскую запись, необходимо сначала:
- Удалить или обновить (
dept_id = NULL) все дочерние записи вemployees. - Либо изменить определение внешнего ключа, добавив
ON DELETE CASCADEилиON DELETE SET NULL.