Database Transactions
Database Transactions
Database Transaction ဆိုတာ ဘာလဲ?
Database မှာ Operation တစ်ခုတည်း မဟုတ်ဘဲ Operation အများကြီးကို ဆက်တိုက်လုပ်ရတဲ့အချိန်တွေ ရှိပါတယ်။ ဥပမာ Bank Transfer တစ်ခုမှာ Account A က ငွေနုတ်ပြီး Account B ထဲ ငွေထည့်ရပါတယ်။ ဒီ Operation နှစ်ခုက တစ်ခုနဲ့တစ်ခု ဆက်စပ်နေပါတယ်။
ဒါပေမယ့် Account A က ငွေနုတ်ပြီး Account B ထဲ မရောက်သေးခင် Server Crash ဖြစ်သွားရင် Account A မှာတော့ ငွေလျော့သွားပြီး Account B မှာ မရောက်သေးတဲ့ Data Error ဖြစ်သွားနိုင်ပါတယ်။ ဒီလို Partial Update ပြဿနာကို ကာကွယ်ဖို့ Database Transaction ကို အသုံးပြုပါတယ်။
Database Transaction ဆိုတာ Database Operation အများအပြားကို တစ်ခုတည်းသော Unit အဖြစ် Execute လုပ်ပေးတဲ့ Mechanism ဖြစ်ပါတယ်။ Transaction ထဲက Operation အားလုံး အောင်မြင်မှ Database မှာ အတည်ပြုသိမ်းဆည်း (Commit) လုပ်ပြီး၊ တစ်ခုခု Fail ဖြစ်သွားရင် Operation အားလုံးကို Cancel (Rollback) လုပ်ပေးပါတယ်။
Transaction က ဘယ်လိုအလုပ်လုပ်တာလဲ?
Transaction တစ်ခုကို စလိုက်တာနဲ့ Database ဟာ Changes တွေကို ချက်ချင်း မသိမ်းသေးပါဘူး။ Operation အားလုံး အောင်မြင်တဲ့အထိ စောင့်ပြီးမှ Database ထဲကို အတည်ပြုသိမ်းပါတယ်။
ဥပမာ Account A က $100 နုတ်ပြီး Account B ကို $100 ထည့်တဲ့ Transfer တစ်ခုကို စဉ်းစားကြည့်ပါ။
- Account A က $100 နုတ်မယ်။
- Account B ထဲ $100 ထည့်မယ်။
- Operation နှစ်ခုလုံး အောင်မြင်ရင် Commit လုပ်မယ်။
- တစ်ခုခု Fail ဖြစ်ရင် Rollback လုပ်ပြီး အရင်အတိုင်း ပြန်ထားမယ်။
ဒီလိုလုပ်ခြင်းအားဖြင့် Operation တစ်ဝက်တစ်ပျက်ကြောင့် ဖြစ်လာနိုင်တဲ့ Data Error တွေကို ကာကွယ်နိုင်ပါတယ်။
ACID ဆိုတာ ဘာလဲ?
Database Transaction တွေ မှန်မှန်ကန်ကန် အလုပ်လုပ်နိုင်ဖို့ ACID Properties ဆိုတဲ့ Rule လေးခုကို လိုက်နာရပါတယ်။
Atomicity
Transaction ထဲက Operation အားလုံးဟာ "All or Nothing" ဖြစ်ရပါမယ်။ Operation အားလုံး အောင်မြင်မှ Commit လုပ်ပြီး၊ တစ်ခုခု Fail ဖြစ်သွားရင်တော့ Operation အားလုံးကို Rollback လုပ်ရပါမယ်။
Consistency
Transaction မစခင်နဲ့ ပြီးဆုံးပြီးတဲ့အချိန်မှာ Database ဟာ Valid State မှာပဲ ရှိရပါမယ်။ Transaction ကြောင့် Database Rules တွေ မပျက်စီးသွားစေရပါဘူး။
Isolation
Transaction အများအပြားကို တစ်ပြိုင်တည်း Execute လုပ်နေရင်တောင် Transaction တစ်ခုရဲ့ လုပ်ဆောင်ချက်ဟာ အခြား Transaction တွေကို မထိခိုက်စေရပါဘူး။
Durability
Transaction ကို Commit လုပ်ပြီးတာနဲ့ Data ဟာ အမြဲတမ်း သိမ်းဆည်းထားရပါမယ်။ Server Restart ဖြစ်သွားတာ၊ Power ပျက်သွားတာမျိုး ဖြစ်ခဲ့ရင်တောင် Commit လုပ်ပြီးသား Data မပျောက်သင့်ပါဘူး။
Commit ဆိုတာ ဘာလဲ?
Commit ဆိုတာ Transaction ထဲက Operation အားလုံး အောင်မြင်သွားတဲ့အခါ Database ကို အတည်ပြုသိမ်းလိုက်တာ ဖြစ်ပါတယ်။
Commit ပြီးသွားတဲ့ Data ကို Rollback နဲ့ ပြန်ဖျက်လို့ မရတော့ပါဘူး။
ဥပမာ
Account A = $900
Account B = $600
Transfer ပြီး Commit လုပ်လိုက်ရင်
Account A = $800
Account B = $700
ဒီ State က Database ထဲမှာ အမြဲတမ်း သိမ်းသွားပါပြီ။
Rollback ဆိုတာ ဘာလဲ?
Rollback ဆိုတာ Transaction အတွင်းမှာ Error တစ်ခုခု ဖြစ်သွားတဲ့အခါ ပြုလုပ်ထားတဲ့ Changes အားလုံးကို Cancel လုပ်ပြီး Database ကို မူလအခြေအနေအတိုင်း ပြန်ထားပေးတာ ဖြစ်ပါတယ်။
ဥပမာ
- Account A က ငွေနုတ်ပြီးသွားတယ်။
- Account B Update လုပ်တဲ့အချိန် Database Error ဖြစ်သွားတယ်။
ဒီလိုအချိန်မှာ Rollback လုပ်လိုက်ရင်
Account A = $900
Account B = $600
မူလအတိုင်း ပြန်ဖြစ်သွားပါလိမ့်မယ်။
Node.js Example
MySQL Transaction တစ်ခုကို Node.js နဲ့ ရေးမယ်ဆိုရင် ဒီလိုပုံစံမျိုး ဖြစ်နိုင်ပါတယ်။
const connection = await pool.getConnection();
try {
await connection.beginTransaction();
await connection.query(
"UPDATE accounts SET balance = balance - 100 WHERE id = 1",
);
await connection.query(
"UPDATE accounts SET balance = balance + 100 WHERE id = 2",
);
await connection.commit();
} catch (error) {
await connection.rollback();
} finally {
connection.release();
}
Transaction စပြီး Account နှစ်ခုလုံး Update အောင်မြင်ရင် commit() လုပ်ပါတယ်။ Error ဖြစ်သွားရင် rollback() လုပ်ပြီး Database ကို အရင် State ပြန်ရောက်အောင် လုပ်ပေးပါတယ်။
Isolation Levels ဆိုတာ ဘာလဲ?
Transaction အများကြီး တစ်ပြိုင်တည်း Run နေတဲ့အခါ Data မမှားအောင် Isolation Level တွေကို Database က သတ်မှတ်ပေးထားပါတယ်။
Read Uncommitted
တခြား Transaction Commit မလုပ်ရသေးတဲ့ Data ကိုတောင် ဖတ်နိုင်ပါတယ်။ Performance မြန်ပေမယ့် Production မှာ အသုံးနည်းပါတယ်။
Read Committed
Commit လုပ်ပြီးသား Data ကိုပဲ ဖတ်နိုင်ပါတယ်။ Database အများစုမှာ အသုံးများတဲ့ Isolation Level တစ်ခု ဖြစ်ပါတယ်။
Repeatable Read
Transaction တစ်ခုအတွင်းမှာ Query ကို အကြိမ်ကြိမ် Run လုပ်ရင် Result တူနေစေပါတယ်။ MySQL (InnoDB) ရဲ့ Default Isolation Level ဖြစ်ပါတယ်။
Serializable
Transaction တွေကို တစ်ခုပြီးမှ တစ်ခု Run သလို Handle လုပ်ပေးတဲ့ Isolation Level ဖြစ်ပါတယ်။ Data Consistency အမြင့်ဆုံးရပေမယ့် Lock ပိုများပြီး Concurrency နဲ့ Performance လျော့နိုင်ပါတယ်။ Banking လို Data Accuracy အရမ်းအရေးကြီးတဲ့ System တွေမှာ အသုံးပြုလေ့ရှိပါတယ်။
Transaction ကို ဘယ်အချိန်မှာ အသုံးပြုသင့်လဲ?
Operation တစ်ခု Fail ဖြစ်ရင် ကျန်တဲ့ Operation တွေပါ မလုပ်သင့်တဲ့ အခြေအနေတိုင်းမှာ Transaction ကို အသုံးပြုသင့်ပါတယ်။
ဥပမာ
- Bank Transfer
- Order Creation
- Payment Processing
- Wallet Balance Update
- Inventory Management
ဒီလို Business Logic တွေမှာ Transaction မရှိရင် Data Error ဖြစ်နိုင်ခြေ အရမ်းများပါတယ်။
အကျဉ်းချုပ်အားဖြင့် Database Transaction ဆိုတာ Database Operation အများအပြားကို တစ်ခုတည်းသော Unit အဖြစ် Execute လုပ်ပေးတဲ့ Mechanism ဖြစ်ပါတယ်။ ACID Properties ကြောင့် Data Consistency ကို ထိန်းသိမ်းနိုင်ပြီး Commit နဲ့ Rollback ကို အသုံးပြုကာ Partial Update ပြဿနာတွေကို ကာကွယ်ပေးပါတယ်။ Payment၊ Banking၊ Order နဲ့ Inventory စတဲ့ Business-critical System တွေမှာ Database Transaction ဟာ မရှိမဖြစ် အသုံးပြုသင့်တဲ့ Feature တစ်ခုဖြစ်ပါတယ်။
Related Posts
Database Normalization
Update/Insert/Delete Anomaly, 1NF, 2NF, 3NF နဲ့ Denormalization - Backend Developer တိုင်းသိထားရမည့် Database Normalization Fundamentals
July 26, 2026
Go အခြေခံများ
Go ရဲ့ အခြေခံ syntax မှ concurrency အထိ - high-performance backend applications တည်ဆောက်ဖို့ လိုအပ်တဲ့ အရာအားလုံး
January 1, 2026
Go Basics: A Beginner's Guide to Golang
From basic syntax to goroutines and channels - everything you need to build scalable backend systems with Go
January 1, 2026