Junior — Middle
Welk gedrag vertoont de PostgreSQL-database wanneer bij het verwijderen van een record dat via een buitenlandse sleutel met een andere tabel is verbonden, geen expliciete actie is aangegeven?
sobes.tech AI
Antwoord van 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 при создании внешнего ключа.