Ce comportament al bazei de date PostgreSQL se observă dacă, la ștergerea unei înregistrări legate de o altă tabelă printr-o cheie externă, nu se specifică o acțiune explicită?
sobes.tech AI
Răspuns de la AI
În PostgreSQL, dacă la ștergerea unei înregistrări legate de o altă tabelă printr-o cheie externă nu se specifică o acțiune explicită (de exemplu, ON DELETE CASCADE sau ON DELETE SET NULL), comportamentul implicit este ON DELETE NO ACTION.
Aceasta înseamnă că o încercare de a șterge o înregistrare la care se face referire dintr-o altă tabelă va duce la o eroare de restricție a cheii externe, iar ștergerea nu va fi efectuată.
Astfel, baza de date previne încălcarea integrității datelor, împiedicând ștergerea unei înregistrări părinte atâta timp cât există înregistrări copil legate.
Exemplu:
-- Tabelul comenzilor cu o cheie externă către tabelul clienți
CREATE TABLE customers (
id SERIAL PRIMARY KEY
);
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
customer_id INT REFERENCES customers(id)
);
-- Încercarea de a șterge un client care are comenzi, fără ON DELETE CASCADE
DELETE FROM customers WHERE id = 1; -- va genera o eroare
Pentru a permite ștergerea cu eliminarea automată a înregistrărilor legate, trebuie specificat explicit ON DELETE CASCADE la crearea cheii externe.