Junior — Middle
Welches Verhalten zeigt die PostgreSQL-Datenbank, wenn beim Löschen eines Datensatzes, der mit einer anderen Tabelle über einen Fremdschlüssel verbunden ist, keine explizite Aktion angegeben ist?
sobes.tech KI
Antwort von 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 при создании внешнего ключа.