Sobes.tech
Junior — Middle

Milyen viselkedést mutat a PostgreSQL adatbázis, ha egy külső kulccsal egy másik táblához kapcsolódó rekord törlésekor nem adunk meg egyértelmű műveletet?

sobes.tech MI

Válasz az MI-től

A PostgreSQL-ben, ha egy másik táblához külső kulcs révén kapcsolódó rekord törlésekor nem adunk meg egyértelmű műveletet (például ON DELETE CASCADE vagy ON DELETE SET NULL), akkor alapértelmezés szerint a viselkedés ON DELETE NO ACTION.

Ez azt jelenti, hogy egy olyan rekord törlése, amelyre egy másik tábla hivatkozik, külső kulcs korlátozási hibát eredményez, és a törlés nem hajtódik végre.

Így az adatbázis megakadályozza az adatok integritásának megsértését, megakadályozva egy szülő rekord törlését, amíg kapcsolódó gyermek rekordok léteznek.

Példa:

-- Megrendelések tábla külső kulccsal a vevők táblára
CREATE TABLE customers (
    id SERIAL PRIMARY KEY
);

CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    customer_id INT REFERENCES customers(id)
);

-- Megpróbálja törölni egy vevőt, akinek vannak megrendelései, `ON DELETE CASCADE` nélkül
DELETE FROM customers WHERE id = 1; -- hibát fog eredményezni

Az automatikus törlés engedélyezéséhez a kapcsolódó rekordok esetében, explicit módon meg kell adni az ON DELETE CASCADE opciót a külső kulcs létrehozásakor.