ในการทำงานกับฐานข้อมูล คำว่า Transaction เป็นสิ่งสำคัญที่ทำให้การทำงานมีความน่าเชื่อถือ และไม่เกิดปัญหาข้อมูลเสียหาย (Data Corruption) PostgreSQL และระบบฐานข้อมูลเชิงสัมพันธ์ส่วนใหญ่ รองรับคุณสมบัติที่เรียกว่า ACID และมีคำสั่งสำคัญคือ BEGIN, COMMIT, และ ROLLBACK บทความนี้จะอธิบายทุกอย่างพร้อมตัวอย่างจริง
Transaction คืออะไร?
Transaction คือชุดของคำสั่ง SQL ที่ทำงานรวมกันเป็นหนึ่งหน่วย (Unit of Work) หาก Transaction สำเร็จทุกคำสั่ง ข้อมูลจะถูกบันทึก (COMMIT) แต่ถ้ามีคำสั่งใดผิดพลาด ข้อมูลทั้งหมดใน Transaction นั้นจะถูกย้อนกลับ (ROLLBACK)
ตัวอย่าง Transaction
BEGIN; UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; COMMIT;
ACID คืออะไร?
คุณสมบัติหลักของ Transaction คือ ACID ซึ่งประกอบไปด้วย:
- A – Atomicity: ทุกคำสั่งต้องสำเร็จทั้งหมด หรือไม่ทำเลย
- C – Consistency: ข้อมูลต้องถูกต้องตาม Constraint เสมอ
- I – Isolation: แต่ละ Transaction แยกจากกัน ไม่รบกวนกัน
- D – Durability: เมื่อ Commit แล้ว ข้อมูลต้องคงอยู่แม้ระบบล่ม
BEGIN
คำสั่ง BEGIN ใช้เพื่อเริ่มต้น Transaction หลังจาก BEGIN ทุกคำสั่ง SQL จะถูกรวมเป็น Transaction จนกว่าจะ COMMIT หรือ ROLLBACK
BEGIN;
-- คำสั่ง SQL ที่อยู่ใน Transaction
INSERT INTO logs (event) VALUES ('Start Transaction');
COMMIT
เมื่อคำสั่ง SQL ใน Transaction ทำงานสำเร็จทั้งหมด เราจะใช้ COMMIT เพื่อบันทึกผลลัพธ์เข้าสู่ฐานข้อมูล
COMMIT;
ROLLBACK
หาก Transaction เกิดปัญหาหรือมีข้อผิดพลาด สามารถใช้ ROLLBACK เพื่อยกเลิกและย้อนกลับไปยังสถานะก่อน BEGIN
ROLLBACK;
ตัวอย่างการโอนเงินระหว่างบัญชี
สมมติว่าเรามีระบบโอนเงิน ถ้าโอนออกสำเร็จแต่โอนเข้าล้มเหลว ข้อมูลจะเสียหายทันที ดังนั้นจึงต้องใช้ Transaction
BEGIN; UPDATE accounts SET balance = balance - 500 WHERE id = 1; UPDATE accounts SET balance = balance + 500 WHERE id = 2; COMMIT;
ถ้ามี Error เกิดขึ้น:
ROLLBACK;

Isolation Level ของ Transaction
PostgreSQL รองรับ Isolation Level 4 แบบ ได้แก่:
- READ UNCOMMITTED
- READ COMMITTED (ค่าเริ่มต้น)
- REPEATABLE READ
- SERIALIZABLE
การตั้งค่า Isolation Level
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
ข้อควรระวังในการใช้ Transaction
- อย่าเปิด Transaction ค้างไว้นาน → จะทำให้เกิด Lock
- ควรใช้ COMMIT หรือ ROLLBACK ทันทีที่เสร็จงาน
- เลือก Isolation Level ให้เหมาะกับงาน
สรุป
Transaction และ ACID เป็นหัวใจของระบบฐานข้อมูลที่เชื่อถือได้ การใช้ BEGIN, COMMIT และ ROLLBACK อย่างถูกต้องจะช่วยให้ข้อมูลปลอดภัย และป้องกันความเสียหายที่อาจเกิดจากการทำงานผิดพลาด
SEO Keywords
PostgreSQL Transaction,ACID Properties,SQL BEGIN,SQL COMMIT,SQL ROLLBACK,Database Transaction,Transaction Isolation,สอน Transaction,SQL ACID