Sobes.tech
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 көрсөтүү керек.