Junior — Middle
Jakie zachowanie bazy danych PostgreSQL jest obserwowane, jeśli podczas usuwania rekordu powiązanego z inną tabelą przez klucz obcy nie zostanie określone jawne działanie?
sobes.tech AI
Odpowiedź od AI
W PostgreSQL, jeśli podczas usuwania rekordu powiązanego z inną tabelą za pomocą klucza obcego nie zostanie określone jawne działanie (np. ON DELETE CASCADE lub ON DELETE SET NULL), domyślnie stosowane jest zachowanie ON DELETE NO ACTION.
Oznacza to, że próba usunięcia rekordu, na który odwołuje się inna tabela, spowoduje błąd ograniczenia klucza obcego i usunięcie nie zostanie wykonane.
W ten sposób baza danych zapobiega naruszeniu integralności danych, uniemożliwiając usunięcie rekordu rodzica, dopóki istnieją powiązane rekordy potomne.
Przykład:
-- Tabela zamówień z kluczem obcym do tabeli klientów
CREATE TABLE customers (
id SERIAL PRIMARY KEY
);
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
customer_id INT REFERENCES customers(id)
);
-- Próba usunięcia klienta, który ma zamówienia, bez ON DELETE CASCADE
DELETE FROM customers WHERE id = 1; -- spowoduje błąd
Aby umożliwić usuwanie z automatycznym usuwaniem powiązanych rekordów, należy wyraźnie określić ON DELETE CASCADE podczas tworzenia klucza obcego.