6-modul · 9-dars: ACID · Transaction · Join · Index
Daraja: O'rta
ACID · Transaction · Join · Index. PostgreSQL bo‘yicha nazariya, amaliy namuna va mustaqil mashq.
Tushuntirish
## Dars maqsadi ACID · Transaction · Join · Index tushunchalarini farqlash, nima uchun kerakligini izohlash va kichik misolda qo‘llash.
## Nazariya Tranzaksiya bir nechta o'zgarishni bitta mantiqiy birlikka birlashtiradi. ACID: atomicity hammasi yoki hech narsa; consistency belgilangan yaxlitlik qoidalari; isolation parallel tranzaksiyalar ta'sirini boshqarish; durability commitdan keyingi saqlanishdir. Isolation darajasi barcha poygalarni o'zi hal qiladi degani emas: unique constraint, lock va qayta urinish kerak bo'lishi mumkin. BEGIN boshlaydi, COMMIT tasdiqlaydi, ROLLBACK qaytaradi. SAVEPOINT tranzaksiya ichida qisman qaytish nuqtasini beradi. Tashqi email yoki HTTP so'rovi DB rollback bilan avtomatik qaytmaydi; bunday ishlar uchun outbox va idempotency kabi usullar zarur. INNER JOIN faqat moslarni, LEFT/RIGHT tashqi JOIN bir tomondagi mos bo'lmaganlarni ham, FULL JOIN ikkala tomonni, CROSS JOIN barcha kombinatsiyalarni chiqaradi. NATURAL JOIN bir xil nomli ustunlardan yashirin shart tuzadi va schema o'zgarganda xavfli. Index o'qishni tezlashtirishi mumkin, lekin disk va yozish xarajati bor. Unique index takrorni ham cheklaydi; rejani EXPLAIN bilan tekshiring.
## Manbalar [Moduldagi savollar yo‘nalishi](https://github.com/jlkesh/pdp_online_java_lessons/blob/main/interviewquestions/6-module%28database%29.md) [Rasmiy qo‘llanma](https://www.postgresql.org/docs/current/)
Kod quyida o‘quv namunasi sifatida berilgan. To‘liq ilova uchun import, dependency va konfiguratsiya kerak bo‘lishi mumkin. SQLni faqat ajratilgan test bazasida bajaring.
Kod misoli
BEGIN;
CREATE TEMP TABLE demo_balance(id int PRIMARY KEY, amount numeric);
INSERT INTO demo_balance VALUES(1, 100);
SAVEPOINT before_change;
UPDATE demo_balance SET amount = 90 WHERE id = 1;
ROLLBACK TO before_change;
SELECT amount FROM demo_balance; -- 100
ROLLBACK;
Keng tarqalgan xatolar
- Index har qanday so'rovni tezlashtirmaydi; kichik jadvalda sequential scan maqbul bo'lishi mumkin.
Mashqlar
- Ikki sessiyada bir hisobni yangilab lost update holatini va uni lock bilan oldini olishni ko'rsating.
- Bir so'rovni indeks bilan va indekssiz EXPLAIN ANALYZE qilib, rejani solishtiring.
Teglar: modul-06, pdp, nazariya