Junior — Middle
Ποια συμπεριφορά της βάσης δεδομένων PostgreSQL παρατηρείται εάν κατά τη διαγραφή μιας εγγραφής που σχετίζεται με έναν άλλο πίνακα μέσω ενός εξωτερικού κλειδιού, δεν ορίζεται σαφής ενέργεια;
sobes.tech AI
Απάντηση από 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 при создании внешнего ключа.