PostgreSQL Transaction
Uxshbu qo'llanmada siz BEGIN
, COMMIT
va ROLLBACK
iboralari yordamida PostgreSQL tranzaktsiyalarini qanday boshqarishni o'rganasiz
Ma'lumotlar bazasi tranzaksiyasi nima
Ma'lumotlar bazasi tranzaksiyasi - bu bir yoki bir nechta operatsiyalardan iborat yagona ish birligi.
Tranzaktsiyaning klassik misoli - bu bir hisobdan ikkinchisiga bank o'tkazmasi. To'liq operatsiya jo'natuvchi va oluvchi hisoblari o'rtasidagi muvozanatni ta'minlashi kerak. Bu shuni anglatadiki, agar jo'natuvchi hisob X
miqdorini o'tkazsa, oluvchi X
miqdorini oladi, ko'p yoki kam emas.
PostgreSQL tranzaksiyasi atomik, izchil, izolyatsiyalangan va bardoshlidir. Ushbu xususiyatlar odatda ACID
deb ataladi:
Atomlik tranzaktsiyaning hamma yoki hech narsa usulida bajarilishini kafolatlaydi.
Muvofiqlik ma'lumotlar bazasiga yozilgan ma'lumotlarning o'zgarishi haqiqiy bo'lishi va oldindan belgilangan qoidalarga rioya qilinishini ta'minlaydi.
Izolyatsiya tranzaksiya yaxlitligi boshqa tranzaktsiyalarga qanday ko'rinishini aniqlaydi.
Chidamlilik amalga oshirilgan tranzaktsiyalar ma'lumotlar bazasida doimiy saqlanishini ta'minlaydi.
Namuna jadvalini o'rnatish
Namoyish uchun hisoblar nomli yangi jadval yaratamiz:
Tranzaktsiyani boshlang
Quyidagi INSERT
iborasini bajarganingizda:
PostgreSQL darhol accounts
jadvaliga yangi qatorni kiritdi. Bunday holda, siz tranzaksiya qachon boshlanishini bilmaysiz va uni orqaga qaytarish kabi modifikatsiyani ushlab turolmaysiz.
Tranzaktsiyani boshlash uchun siz quyidagi bayonotdan foydalanasiz:
yoki
yoki shunchaki:
Masalan, quyidagi bayonotlar yangi operatsiyani boshlaydi va accounts
jadvaliga yangi hisobni kiritadi:
Joriy seansdan accounts
jadvalini so'rash orqali o'zgarishlarni ko'rishingiz mumkin:
Biroq, agar siz yangi seansni boshlasangiz va yuqoridagi so'rovni bajarsangiz, o'zgarishni ko'rmaysiz.
Tranzaktsiyani amalga oshiring
O'zgartirish boshqa seanslarga (yoki foydalanuvchilarga) ko'rinadigan bo'lishi uchun siz COMMIT WORK
bayonotidan foydalanib tranzaktsiyani amalga oshirishingiz kerak:
yoki
yoki oddiygina:
Quyidagi COMMIT
bayonoti Elisning hisobini accounts
jadvaliga kiritadi:
Boshqa seanslardan accounts
jadvalini so'rash orqali o'zgarishlarni ko'rishingiz mumkin:
COMMIT
bayonotini bajargandan so'ng, PostgreSQL, shuningdek, agar buzilish sodir bo'lsa, o'zgarish bardoshli bo'lishini kafolatlaydi.
Hammasini bir joyga qo'ying.
PostgreSQL COMMIT
: Bank hisobini o'tkazish misoli
COMMIT
: Bank hisobini o'tkazish misoliUshbu namoyishda biz sizga 1000 USD
ni Bobning hisobidan Elisning hisobiga qanday o'tkazishni ko'rsatamiz. Har bir operatsiyaning o'zgarishini ko'rish uchun ikkita seansdan foydalanamiz.
Birinchi seansda yangi tranzaksiyani boshlang:
va 1 identifikatorli Bobning hisobidan 1000 USD
ayirish:
Ikkinchi seansda ikkala hisobning balansini tekshiring:
Chiqish:
Ko'rib turganingizdek, o'zgarish boshqa seanslarda ko'rinmaydi.
Keyin Elisning hisobiga bir xil miqdorni (1000USD) qo'shing:
Bu oʻzgarish biz amalga oshirmagunimizcha ikkinchi seansda ham koʻrinmaydi:
Endi siz istalgan seansdagi o'zgarishlarni ko'rishingiz mumkin:
Hammasini bir joyga qo'ying.
Tranzaksiyani orqaga qaytarish
Joriy tranzaktsiyani orqaga qaytarish yoki o'zgartirishni bekor qilish uchun siz quyidagi bayonotlardan birini ishlatasiz:
yoki
yoki qisqasi:
Aytaylik, siz Bobning hisobidan Elisning hisobiga 1500 dollar o'tkazmoqchisiz. Biroq, siz tasodifan Elisning o'rniga Jekning hisobiga pul yuborasiz. Va siz butun tranzaksiyani qaytarib olishni xohlaysiz.
Birinchidan, hisoblar jadvaliga Jekning hisobini qo'shing:
Keyin, Bobning hisobidan miqdorni olib tashlang:
Keyin, xuddi shu miqdorni Elisning hisobiga qo'shing:
Biroq, Elisning akkauntida id 2 bor. Demak, bu xato edi.
O'zgartirishni bekor qilish uchun siz ROLLBACK
iborasini bajarasiz:
Nihoyat, barcha hisoblarning qoldiqlarini tekshiring:
Chiqarishda aniq ko'rinib turganidek, hisobdagi qoldiqlar tranzaksiyadan oldingi holatda bo'lgani kabi qoladi.
Hammasini qattiqroq qo'ying.
Ushbu qo'llanmada siz BEGIN
, COMMIT
va ROLLBACK
iboralari orqali PostgreSQL tranzaksiyalarini qanday boshqarishni o'rgandingiz.
Last updated