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.

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.

Bu bilan SQL o’rta darajaning katta qismini yakunladik. Keyingi darslarda so’rovlarni birlashtirish (UNION), shartli ifoda (CASE) va boshqa mavzularni ko’ramiz.

Bu dars foydali bo'ldimi?

marta ko'rildi