SQL tranzaksiya — hammasi yoki hech nima

Ba’zan bitta ish bir nechta amaldan iborat bo’ladi va ularning hammasi bajarilishi yoki hech biri bajarilmasligi kerak. Masalan omborni kamaytirib, buyurtma qo’shish — biri bajarilib, ikkinchisi bajarilmasa, baza noto’g’ri holatga tushadi. Shu muammoni tranzaksiya yechadi.

Muammo: yarim bajarilgan ish

Aziz 5 dona Guruch (id 8) sotib oldi. Ikki amal kerak:

  1. Ombordan 5 dona ayirish (UPDATE).
  2. Yangi buyurtma qo’shish (INSERT).

Agar birinchisi bajarilib, ikkinchisida (masalan tok o’chib) uzilib qolsa — ombor kamaydi, lekin buyurtma yo’q. Ma’lumot buzildi.

Yechim: BEGIN, COMMIT, ROLLBACK

Tranzaksiya bir nechta amalni bitta yaxlit blokka o’raydi:

BEGIN TRANSACTION;

UPDATE mahsulotlar SET soni = soni - 5 WHERE id = 8;

INSERT INTO buyurtmalar (id, mijoz_id, mahsulot_id, soni, sana)
VALUES (7, 1, 8, 5, '2026-07-10');

COMMIT;

O’zingiz ishga tushirib ko’ring — so’rovni tahrirlashingiz ham mumkin:

SQL · namuna baza
  • BEGIN TRANSACTION — tranzaksiyani boshlaydi.
  • COMMIT — barcha o’zgarishlarni yakuniy saqlaydi.
  • Agar COMMIT gacha xatolik yuz bersa, hech narsa saqlanmaydi.

Endi ikki amal birga bajariladi: yo ikkalasi ham saqlanadi, yo ikkalasi ham bekor bo’ladi. Yarim holat bo’lmaydi.

ROLLBACK — o’zgarishni bekor qilish

Agar biror narsa noto’g’ri ketsa, COMMIT o’rniga ROLLBACK yozib, barcha o’zgarishni orqaga qaytarasiz:

BEGIN TRANSACTION;

UPDATE mahsulotlar SET narx = narx * 2;   -- xato: hamma narx ikkilandi!

ROLLBACK;   -- bekor qilamiz — narxlar eski holiga qaytadi

ROLLBACK dan keyin UPDATE go’yo umuman bo’lmagandek — barcha narx avvalgi qiymatida qoladi.

Amaliy mashq

Tranzaksiyani sinang:

  1. BEGIN; bilan boshlang;
  2. UPDATE bilan Non sonini kamaytiring;
  3. SELECT bilan o’zgarishni ko’ring;
  4. ROLLBACK; yozing va yana SELECT qiling;
  5. xuddi shuni COMMIT; bilan takrorlang;
  6. bitta tranzaksiyaga UPDATE va INSERT ni birga o’rab, COMMIT bilan yakunlang — ikkala o’zgarish ham saqlanganini tekshiring.

4 va 5-qadam natijalari nega har xil?

Qisqacha xulosa

  • Tranzaksiya — bir nechta amalni yaxlit bajaradi: “hammasi yoki hech nima”.
  • BEGIN TRANSACTION boshlaydi, COMMIT o’zgarishni yakuniy saqlaydi.
  • ROLLBACK barcha o’zgarishni orqaga qaytaradi (xato yuz berganda).
  • Bir-biriga bog’liq amallarni (ombor − buyurtma) doim bitta tranzaksiyaga o’rang — yarim holatdan shunday saqlanadi.
  • Har BEGIN COMMIT yoki ROLLBACK bilan yopilishi kerak.

Keyingi darsda UNION — ikki so’rov natijasini ustma-ust birlashtirishni ko’ramiz.

Bu dars foydali bo'ldimi?

—
— marta ko'rildi