Transactions & ACID และการใช้ BEGIN, COMMIT, ROLLBACK

Sharing is caring!

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

Leave a Reply

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *