ในการทำงานกับฐานข้อมูล คำว่า 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