Что происходит при удалении поля (столбца) из таблицы базы данных, на которое ссылаются внешние ключи из других таблиц?

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

Ответ

Непосредственно удалить столбец, на который существуют ссылки внешними ключами, нельзя. Сначала необходимо удалить или изменить сами ограничения внешнего ключа (FOREIGN KEY constraints).

Типичный порядок действий в SQL:

  1. Удалить внешние ключи в дочерних таблицах.
  2. Удалить столбец из родительской таблицы.
  3. При необходимости — создать новые ограничения.

Пример (PostgreSQL/MySQL синтаксис):

-- 1. Найти и удалить зависимые внешние ключи.
ALTER TABLE child_table DROP CONSTRAINT fk_child_parent_column;

-- 2. Удалить столбец из родительской таблицы.
ALTER TABLE parent_table DROP COLUMN target_column;

Важно: Если под "удалением поля" подразумевается удаление записи (строки) из родительской таблицы, то поведение определяется правилом ON DELETE в определении внешнего ключа:

  • ON DELETE RESTRICT (или по умолчанию): Удаление запрещено, пока существуют зависимые записи.
  • ON DELETE CASCADE: Зависимые записи в дочерних таблицах удаляются автоматически.
  • ON DELETE SET NULL: Внешний ключ в зависимых записях устанавливается в NULL.
  • ON DELETE NO ACTION: Аналогично RESTRICT, но проверка происходит в момент фиксации транзакции.