Skip to content

Latest commit

Β 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Β 
Β 

README.md

🐘 05-DARS: MA'LUMOTLARNI O'ZGARTIRISH VA TRANZAKSIYALAR

πŸ“‹ MAVZU REJASI


🎯 DARS MAQSADI

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 - MA'LUMOTLARNI YANGILASH

πŸ“Œ UPDATE nima?

UPDATE β€” jadvaldagi mavjud qatorlarning qiymatlarini o'zgartirish uchun ishlatiladi.

πŸ’» Sintaksis

UPDATE table_name
SET column1 = value1, 
    column2 = value2
WHERE condition;

Caution

Agar WHERE shartini yozishni unutsangiz, jadvaldagi BARCHA qatorlar yangilanib ketadi!

πŸ§ͺ Misollar

1️⃣ Bitta ustunni yangilash

-- IDsi 1 bo'lgan mijozning ismini o'zgartirish
UPDATE mijozlar
SET ism = 'Akmal'
WHERE id = 1;

2️⃣ Bir nechta ustunni yangilash

-- Mahsulot narxi va sonini yangilash
UPDATE mahsulotlar
SET narx = 5500000,
    stock_quantity = 15
WHERE slug = 'laptop-hp';

3️⃣ Hisob-kitob bilan yangilash

-- Barcha IT bo'limi xodimlarining maoshini 10% ga oshirish
UPDATE xodimlar
SET maosh = maosh * 1.10
WHERE bo'lim = 'IT';

πŸ—‘οΈ DELETE - MA'LUMOTLARNI O'CHIRISH

πŸ“Œ DELETE nima?

DELETE β€” jadvaldan qatorlarni o'chirib tashlaydi.

πŸ’» Sintaksis

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.

πŸ§ͺ Misollar

1️⃣ Shart bo'yicha o'chirish

-- Faol bo'lmagan foydalanuvchilarni o'chirish
DELETE FROM foydalanuvchilar
WHERE is_active = FALSE;

2️⃣ Murakkab shart bilan o'chirish

-- Bekor qilingan va 30 kundan eski buyurtmalarni o'chirish
DELETE FROM buyurtmalar
WHERE status = 'cancelled' 
  AND ordered_at < NOW() - INTERVAL '30 days';

🧹 TRUNCATE - JADVALNI TOZALASH

πŸ“Œ TRUNCATE nima?

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;

πŸ”™ RETURNING - NATIJANI QAYTARISH

πŸ“Œ RETURNING nima?

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

πŸ›‘οΈ TRANZAKSIYALAR (BEGIN, COMMIT, ROLLBACK)

πŸ“Œ Tranzaksiya nima?

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

  1. Ali hisobidan 100 ming so'm ayirish.
  2. Vali hisobiga 100 ming so'm qo'shish. (Agar 2-qadamda chiroq o'chib qolsa, 1-qadam ham bekor bo'lishi shart!)

πŸ’» Kalit so'zlar

  • BEGIN β€” Tranzaksiyani boshlash.
  • COMMIT β€” Barcha o'zgarishlarni tasdiqlash (saqlash).
  • ROLLBACK β€” Barcha o'zgarishlarni bekor qilish (ortga qaytarish).

πŸ§ͺ Misol

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;

πŸŽ“ AMALIY MASHG'ULOT

πŸ“Š MIJOZLAR VA BALANCE JADVALI

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     β”‚
β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

✏️ Topshiriqlar

1️⃣ UPDATE - Oddiy yangilash

  • 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.

2️⃣ UPDATE - Shartli yangilash

  • '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.

3️⃣ DELETE - O'chirish

  • 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.

4️⃣ RETURNING operatori

  • 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.

5️⃣ Tranzaksiyalar (Mantiqiy)

  • 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.

🎯 DARS YAKUNLARI

βœ… Siz o'rgandingiz:

  • 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

πŸ“š Keyingi darsda:

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

πŸ“– QO'SHIMCHA RESURSLAR

πŸ’‘ Professional maslahatlar

  1. Doimo tekshiring: UPDATE yoki DELETE qilishdan oldin, shartingiz to'g'riligini SELECT orqali tekshirib ko'ring.
  2. Tranzaksiyalardan foydalaning: Katta o'zgarishlar qilayotganda BEGIN ishlatish xatolikdan asraydi.
  3. Backup: Muhim ma'lumotlarni o'chirishdan oldin ularning nusxasini oling.
  4. 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.