Sobes.tech
Junior — Middle

PostgreSQL ma'lumotlar bazasining qanday xulq-atvori kuzatiladi, agar tashqi kalit orqali boshqa jadval bilan bog'langan yozuv o'chirilganda, aniq harakat ko'rsatilmagan bo'lsa?

sobes.tech AI

AIdan javob

PostgreSQL'da, xaritada bog'liq yozuvni o'chirishda, agar aniq harakat ko'rsatilmagan bo'lsa (masalan, ON DELETE CASCADE yoki ON DELETE SET NULL), standart ravishda ON DELETE NO ACTION xulqini qo'llaydi.

Bu, boshqa jadvaldan murojaat qilinadigan yozuvni o'chirishga harakat qilish, tashqi kalit cheklov xatosiga olib keladi va o'chirish amalga oshirilmaydi.

Shunday qilib, ma'lumotlar bazasi, bog'liq bolalar yozuvlari mavjud bo'lsa, ota yozuvini o'chirishni oldini oladi va ma'lumotlarning yaxlitligini ta'minlaydi.

Misol:

-- Mijozlar jadvali va tashqi kalit bilan buyurtmalar jadvali
CREATE TABLE customers (
    id SERIAL PRIMARY KEY
);

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

-- Buyurtmalari bo'lgan mijozni, ON DELETE CASCADE bo'lmagan holda o'chirishga urinish
DELETE FROM customers WHERE id = 1; -- xato bilan tugaydi

Bog'liq yozuvlarni avtomatik o'chirishga ruxsat berish uchun, tashqi kalit yaratilayotganda aniq ON DELETE CASCADE ko'rsatilishi kerak.