- UPDATE - Ma'lumotlarni yangilash
- DELETE - Ma'lumotlarni o'chirish
- TRUNCATE - Jadvalni tozalash
- RETURNING - Natijani qaytarish
- Tranzaksiyalar (BEGIN, COMMIT, ROLLBACK)
- Ma'lumotlar yaxlitligi (Data Integrity)
- Amaliy mashg'ulot
Ushbu darsda siz quyidagilarni o'rganasiz:
β
Mavjud ma'lumotlarni xavfsiz yangilash (UPDATE)
β
Ma'lumotlarni shart asosida o'chirish (DELETE)
β
Tranzaksiyalar yordamida ma'lumotlar xavfsizligini ta'minlash
β
Xatolik yuz berganda o'zgarishlarni bekor qilish (ROLLBACK)
β
O'zgartirilgan ma'lumotlarni darhol ko'rish (RETURNING)
β
Real proyektlarda ma'lumotlarni boshqarish strategiyalari
UPDATE β jadvaldagi mavjud qatorlarning qiymatlarini o'zgartirish uchun ishlatiladi.
UPDATE table_name
SET column1 = value1,
column2 = value2
WHERE condition;Caution
Agar WHERE shartini yozishni unutsangiz, jadvaldagi BARCHA qatorlar yangilanib ketadi!
-- IDsi 1 bo'lgan mijozning ismini o'zgartirish
UPDATE mijozlar
SET ism = 'Akmal'
WHERE id = 1;-- Mahsulot narxi va sonini yangilash
UPDATE mahsulotlar
SET narx = 5500000,
stock_quantity = 15
WHERE slug = 'laptop-hp';-- Barcha IT bo'limi xodimlarining maoshini 10% ga oshirish
UPDATE xodimlar
SET maosh = maosh * 1.10
WHERE bo'lim = 'IT';DELETE β jadvaldan qatorlarni o'chirib tashlaydi.
DELETE FROM table_name
WHERE condition;Warning
WHERE shartisiz DELETE buyrug'i jadvaldagi barcha ma'lumotlarni o'chirib yuboradi, lekin jadvalning o'zi (strukturasi) qoladi.
-- Faol bo'lmagan foydalanuvchilarni o'chirish
DELETE FROM foydalanuvchilar
WHERE is_active = FALSE;-- Bekor qilingan va 30 kundan eski buyurtmalarni o'chirish
DELETE FROM buyurtmalar
WHERE status = 'cancelled'
AND ordered_at < NOW() - INTERVAL '30 days';TRUNCATE β jadvaldagi barcha ma'lumotlarni juda tez o'chirib tashlaydi.
DELETE va TRUNCATE farqi:
| Xususiyat | DELETE | TRUNCATE |
|---|---|---|
| Tezlik | Sekinroq (har bir qatorni tekshiradi) | Juda tez (to'g'ridan-to'g'ri tozalaydi) |
| WHERE | Ishlatish mumkin | Ishlatib bo'lmaydi |
| Rollback | Mumkin | Ba'zi holatlarda qiyin |
| Triggerlar | Ishga tushadi | Ishga tushmaydi |
-- Jadvalni to'liq tozalash
TRUNCATE TABLE loglar;O'zgarish amalga oshgandan so'ng, qaysi qatorlar o'zgarganini darhol ko'rish uchun ishlatiladi.
-- Narxni yangilab, yangi narxni natija sifatida olish
UPDATE mahsulotlar
SET narx = narx + 50000
WHERE kategoriya = 'Kitob'
RETURNING id, nom, narx;Natija:
id | nom | narx
----+-----------------+--------
7 | PostgreSQL Book | 300000
8 | Python Book | 350000
Tranzaksiya β bir nechta SQL buyruqlarini bitta "paket"ga birlashtirish. Ya'ni, yoki barcha buyruqlar muvaffaqiyatli bajariladi, yoki birontasi xato bo'lsa, hech biri bajarilmaydi (hammasi bekor qilinadi).
Mashhur misol: Bank o'tkazmasi
- Ali hisobidan 100 ming so'm ayirish.
- Vali hisobiga 100 ming so'm qo'shish. (Agar 2-qadamda chiroq o'chib qolsa, 1-qadam ham bekor bo'lishi shart!)
BEGINβ Tranzaksiyani boshlash.COMMITβ Barcha o'zgarishlarni tasdiqlash (saqlash).ROLLBACKβ Barcha o'zgarishlarni bekor qilish (ortga qaytarish).
BEGIN;
-- 1. Pulni ayirish
UPDATE hisoblar SET balance = balance - 100000 WHERE user_id = 1;
-- 2. Pulni qo'shish
UPDATE hisoblar SET balance = balance + 100000 WHERE user_id = 2;
-- Agar hammasi joyida bo'lsa:
COMMIT;
-- Agar biror xato bo'lsa (masalan, user 2 topilmasa):
ROLLBACK;Quyidagi ma'lumotlar bilan ishlang:
ββββββ¬βββββββββββββ¬ββββββββββββββ¬βββββββββββββββ¬βββββββββββ¬ββββββββββββ
β id β ism β shahar β balance β status β type β
ββββββΌβββββββββββββΌββββββββββββββΌβββββββββββββββΌβββββββββββΌββββββββββββ€
β 1 β Ali β Toshkent β 1,500,000 β Active β Premium β
β 2 β Madina β Samarqand β 450,000 β Active β Standard β
β 3 β Bekzod β Buxoro β 2,000,000 β Inactive β Premium β
β 4 β Dilnoza β Toshkent β 0 β Active β Standard β
β 5 β Sardor β Farg'ona β 750,000 β Active β Standard β
β 6 β Zarina β Toshkent β 3,200,000 β Active β Gold β
β 7 β Abbos β Namangan β 150,000 β Inactive β Basic β
ββββββ΄βββββββββββββ΄ββββββββββββββ΄βββββββββββββββ΄βββββββββββ΄ββββββββββββ
- Toshkentlik barcha mijozlarning balansiga 50,000 so'm bonus qo'shing.
- Balansi 0 bo'lgan mijozlarning statusini 'Inactive' ga o'zgartiring.
- 'Samarqand' shahrini 'Samarkand' deb to'g'irlang.
- 'Premium' foydalanuvchilarning balansini 10% ga oshiring.
- IDsi 3 bo'lgan foydalanuvchini 'Active' qiling va balansini 0 qiling.
- Balansi 1,000,000 dan yuqori va 'Active' bo'lganlarni 'Gold' turiga o'tkazing.
- Statusi 'Inactive' bo'lgan va balansi 200,000 dan kam bo'lgan mijozlarni o'chiring.
- 'Basic' turidagi barcha mijozlarni o'chirib tashlang.
- Farg'onalik barcha foydalanuvchilarni bazadan o'chiring.
- IDsi 5 bo'lgan mijozning shahrini 'Toshkent' ga o'zgartiring va uning yangi ma'lumotlarini qaytaring.
- Barcha 'Active' mijozlarning balansini 5% ga kamaytiring va faqat ularning ismlari va yangi balansini ko'ring.
- Tranzaksiya boshlang: 1-mijozdan 200,000 ayiring va 2-mijozga qo'shing. O'zgarishlarni saqlang.
- Tranzaksiya boshlang: Barcha foydalanuvchilarni o'chiring. Keyin fikringizdan qayting va o'zgarishni bekor qiling.
- UPDATE bilan ma'lumotlarni shartli yangilash
- DELETE va TRUNCATE farqi
- Ma'lumotlarni o'chirib yubormaslik uchun ehtiyot choralari
- RETURNING orqali o'zgargan qatorlarni ko'rish
- BEGIN, COMMIT, ROLLBACK bilan xavfsiz ishlash
06-DARS: Jadvallarni bog'lash (JOINS)
- INNER JOIN, LEFT JOIN, RIGHT JOIN
- Bir nechta jadvallar bilan birga ishlash
- Foreign Key bilan munosabatlar
- Murakkab so'rovlar yasash
- Doimo tekshiring:
UPDATEyokiDELETEqilishdan oldin, shartingiz to'g'riliginiSELECTorqali tekshirib ko'ring. - Tranzaksiyalardan foydalaning: Katta o'zgarishlar qilayotganda
BEGINishlatish xatolikdan asraydi. - Backup: Muhim ma'lumotlarni o'chirishdan oldin ularning nusxasini oling.
- RETURNING: Web-backendlarda (Node.js, Python) bu operator juda qo'l keladi, chunki bitta so'rovda ham yangilab, ham yangi ma'lumotni front-endga qaytarish mumkin.