PlusMagi's Blog By Pitt Phunsanit Backend,Database ถอดรหัส ACID ใน 5 นาที: กลไกหลังบ้านที่ทำให้ระบบโอนเงิน Transaction สำเร็จ 100% หรือยกเลิกทั้งหมด

ถอดรหัส ACID ใน 5 นาที: กลไกหลังบ้านที่ทำให้ระบบโอนเงิน Transaction สำเร็จ 100% หรือยกเลิกทั้งหมด

ในโลกของการเงินดิจิทัลที่ทุกธุรกรรมมีมูลค่าสูง ความน่าเชื่อถือของข้อมูล (Data Integrity) จึงเป็นสิ่งที่ไม่สามารถประนีประนอมได้ ไม่ว่าจะเป็นการโอนเงินข้ามธนาคาร การจองตั๋ว หรือการทำธุรกรรม E-commerce ระบบฐานข้อมูลเบื้องหลังจะต้องรับประกันว่าทุกขั้นตอนจะต้องสำเร็จอย่างสมบูรณ์แบบ หรือหากมีส่วนใดผิดพลาด จะต้องถูกยกเลิก (Rollback) กลับไปสู่สถานะเดิมได้อย่างไร้ร่องรอย

หัวใจสำคัญที่ค้ำจุนความน่าเชื่อถือนี้คือชุดคุณสมบัติที่เรียกว่า ACID ซึ่งเป็นหลักการพื้นฐานของระบบฐานข้อมูลเชิงสัมพันธ์ (Relational Database) และเป็นสิ่งที่ PostgreSQL ใช้เพื่อรับประกันความถูกต้องของข้อมูลอย่างเข้มงวด

💡 ACID คืออะไร? 4 เสาหลักแห่งความน่าเชื่อถือของข้อมูล

ACID ย่อมาจาก 4 คำหลัก ซึ่งแต่ละคำมีความหมายและบทบาทในการรักษาความสมบูรณ์ของข้อมูล:

  • A – Atomicity (อะตอมมิตี้): การรับประกันว่าธุรกรรม (Transaction) ทั้งหมดจะต้องถูกดำเนินการจนเสร็จสิ้นในฐานะหน่วยเดียว (All or Nothing) หากขั้นตอนใดล้มเหลวแม้แต่ขั้นตอนเดียว ระบบจะต้องยกเลิกทุกอย่างที่ทำไปแล้ว
  • C – Consistency (คอนซิสเทนซี): ระบบจะต้องมั่นใจว่าข้อมูลที่เขียนลงไปนั้นจะต้องเป็นไปตามกฎเกณฑ์ทางธุรกิจ (Business Rules) ที่กำหนดไว้เสมอ เช่น ยอดเงินในบัญชีต้องไม่ติดลบเกินกว่าวงเงินที่อนุญาต
  • I – Isolation (ไอโซเลชัน): การรับประกันว่าธุรกรรมหลายรายการที่เกิดขึ้นพร้อมกัน (Concurrent Transactions) จะไม่รบกวนหรือมองเห็นผลกระทบของกันและกัน ทำให้ดูเหมือนว่าแต่ละธุรกรรมกำลังทำงานอยู่เพียงลำพัง
  • D – Durability (ทูเรเบิลลิตี้): เมื่อระบบยืนยันการทำธุรกรรมสำเร็จแล้ว (Commit) ข้อมูลนั้นจะต้องถูกบันทึกอย่างถาวรและไม่สูญหาย แม้ว่าระบบจะเกิดไฟฟ้าดับหรือล่มก็ตาม

💻 การทำงานของ ACID ใน PostgreSQL: ตัวอย่างการโอนเงิน

ในทางปฏิบัติ PostgreSQL ใช้คำสั่ง Transaction Control เพื่อบังคับใช้ ACID โดยเฉพาะในการโอนเงิน ซึ่งต้องมีการลดเงินจากบัญชีต้นทางและเพิ่มเงินให้บัญชีปลายทางพร้อมกัน การใช้ BEGIN, COMMIT และ ROLLBACK คือกลไกสำคัญที่ทำให้มั่นใจว่าการโอนเงินจะสำเร็จ 100% หรือล้มเหลว 100% เท่านั้น

พิจารณาตัวอย่างการโอนเงิน 100 บาท จากบัญชี A ไปยังบัญชี B:

SQL

-- 1. เริ่มต้น Transaction (BEGIN) เพื่อให้ระบบจับตาดูทุกคำสั่ง<br>BEGIN;<br><br>-- 2. ลดเงินจากบัญชี A (Debit)<br>UPDATE accounts SET balance = balance - 100 WHERE account_id = 'A';<br><br>-- 3. เพิ่มเงินให้บัญชี B (Credit)<br>UPDATE accounts SET balance = balance + 100 WHERE account_id = 'B';<br><br>-- 4. หากทุกอย่างสำเร็จ (A และ B ถูกอัปเดตแล้ว) ให้ยืนยันการเปลี่ยนแปลง<br>COMMIT;<br><br>-- หากเกิดข้อผิดพลาดใดๆ (เช่น บัญชี A ไม่มีเงิน) ระบบจะทำงานถึงบรรทัดนี้<br>-- และเราจะใช้คำสั่ง ROLLBACK; เพื่อย้อนกลับทุกอย่างที่ทำไป<br>-- ROLLBACK;<br>

หากมีการรันโค้ดข้างต้น และขั้นตอนที่ 2 สำเร็จ แต่ขั้นตอนที่ 3 ล้มเหลว (เช่น บัญชี B ถูกลบไปแล้ว) PostgreSQL จะทำให้ Transaction ทั้งหมดไม่สมบูรณ์ และเราจะใช้ ROLLBACK เพื่อยกเลิกการลดเงินจากบัญชี A ทันที ทำให้ข้อมูลกลับไปสู่สถานะก่อนการทำธุรกรรมอย่างสมบูรณ์ตามหลัก Atomicity

✅ บทสรุป

ACID ไม่ใช่แค่แนวคิดทางทฤษฎี แต่เป็นชุดของกลไกทางเทคนิคที่ PostgreSQL ใช้ในการรับประกันความน่าเชื่อถือของข้อมูลในระดับรากฐาน การทำความเข้าใจหลักการเหล่านี้ช่วยให้เราสามารถออกแบบระบบหลังบ้านที่มั่นคงและเชื่อถือได้สำหรับการประมวลผลธุรกรรมทางการเงินที่สำคัญที่สุดในยุคดิจิทัล