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:
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:
BEGIN TRANSACTION— tranzaksiyani boshlaydi.COMMIT— barcha o’zgarishlarni yakuniy saqlaydi.- Agar
COMMITgacha 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:
BEGIN;bilan boshlang;UPDATEbilanNonsonini kamaytiring;SELECTbilan o’zgarishni ko’ring;ROLLBACK;yozing va yanaSELECTqiling;- 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 TRANSACTIONboshlaydi,COMMITo’zgarishni yakuniy saqlaydi.ROLLBACKbarcha o’zgarishni orqaga qaytaradi (xato yuz berganda).- Bir-biriga bog’liq amallarni (ombor − buyurtma) doim bitta tranzaksiyaga o’rang — yarim holatdan shunday saqlanadi.
- Har
BEGINCOMMITyokiROLLBACKbilan 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.