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:

DROP TABLE IF EXISTS accounts;

CREATE TABLE accounts (
    id INT GENERATED BY DEFAULT AS IDENTITY,
    name VARCHAR(100) NOT NULL,
    balance DEC(15,2) NOT NULL,
    PRIMARY KEY(id)
);

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:

output

Biroq, agar siz yangi seansni boshlasangiz va yuqoridagi so'rovni bajarsangiz, o'zgarishni ko'rmaysiz.

output

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:

output

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

Ushbu 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:

output

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:

output

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:

output

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.

© postgresqltutorial.com

Last updated

Was this helpful?