Junior — Middle
Jaké chování databáze PostgreSQL je pozorováno, pokud při mazání záznamu, který je spojen s jinou tabulkou přes cizí klíč, není uvedena žádná explicitní akce?
sobes.tech AI
Odpověď od 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 при создании внешнего ключа.