Sobes.tech
Back to questions
Junior — Middle
66

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

Companies where asked
СБЕРСБЕР

Answer from AI

sobes.tech AI

В PostgreSQL, если при удалении записи, связанной с другой таблицей через внешний ключ, не указано явное действие (например, ON DELETE CASCADE или ON DELETE SET NULL), по умолчанию применяется поведение ON DELETE NO ACTION.

Это означает, что попытка удалить запись, на которую ссылаются из другой таблицы, приведет к ошибке ограничения внешнего ключа, и удаление не будет выполнено.

Таким образом, база данных предотвращает нарушение целостности данных, не позволяя удалить родительскую запись, пока существуют связанные дочерние записи.

Пример:

-- Таблица заказов с внешним ключом на таблицу клиентов
CREATE TABLE customers (
    id SERIAL PRIMARY KEY
);

CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    customer_id INT REFERENCES customers(id)
);

-- Попытка удалить клиента, у которого есть заказы, без ON DELETE CASCADE
DELETE FROM customers WHERE id = 1; -- вызовет ошибку

Чтобы разрешить удаление с автоматическим удалением связанных записей, нужно явно указать ON DELETE CASCADE при создании внешнего ключа.