PostgreSQL - ธุรกรรม

ธุรกรรมคือหน่วยของงานที่ดำเนินการกับฐานข้อมูล ธุรกรรมคือหน่วยหรือลำดับของงานที่ทำตามลำดับตรรกะไม่ว่าจะเป็นแบบกำหนดเองโดยผู้ใช้หรือโดยอัตโนมัติโดยโปรแกรมฐานข้อมูลบางประเภท

ธุรกรรมคือการแพร่กระจายของการเปลี่ยนแปลงอย่างน้อยหนึ่งรายการในฐานข้อมูล ตัวอย่างเช่นหากคุณกำลังสร้างบันทึกอัปเดตระเบียนหรือลบระเบียนออกจากตารางแสดงว่าคุณกำลังทำธุรกรรมบนโต๊ะ เป็นสิ่งสำคัญในการควบคุมธุรกรรมเพื่อให้แน่ใจว่าข้อมูลมีความสมบูรณ์และจัดการกับข้อผิดพลาดของฐานข้อมูล

ในทางปฏิบัติคุณจะรวบรวมแบบสอบถาม PostgreSQL จำนวนมากไว้ในกลุ่มและคุณจะดำเนินการทั้งหมดร่วมกันเป็นส่วนหนึ่งของธุรกรรม

คุณสมบัติของธุรกรรม

ธุรกรรมมีคุณสมบัติมาตรฐานสี่ประการดังต่อไปนี้โดยปกติจะอ้างถึงโดยตัวย่อ ACID -

  • Atomicity- ตรวจสอบให้แน่ใจว่าการดำเนินการทั้งหมดภายในหน่วยงานเสร็จสมบูรณ์ มิฉะนั้นธุรกรรมจะถูกยกเลิกเมื่อถึงจุดที่ล้มเหลวและการดำเนินการก่อนหน้านี้จะย้อนกลับไปสู่สถานะเดิม

  • Consistency - ตรวจสอบให้แน่ใจว่าฐานข้อมูลมีการเปลี่ยนแปลงสถานะอย่างเหมาะสมเมื่อทำธุรกรรมสำเร็จ

  • Isolation - ช่วยให้การทำธุรกรรมดำเนินการอย่างอิสระและโปร่งใสซึ่งกันและกัน

  • Durability - ตรวจสอบให้แน่ใจว่าผลลัพธ์หรือผลของธุรกรรมที่ตกลงกันยังคงมีอยู่ในกรณีที่ระบบล้มเหลว

การควบคุมธุรกรรม

คำสั่งต่อไปนี้ใช้เพื่อควบคุมธุรกรรม -

  • BEGIN TRANSACTION - เพื่อเริ่มการทำธุรกรรม

  • COMMIT - หากต้องการบันทึกการเปลี่ยนแปลงหรือคุณสามารถใช้ END TRANSACTION คำสั่ง

  • ROLLBACK - เพื่อย้อนกลับการเปลี่ยนแปลง

คำสั่งควบคุมธุรกรรมใช้เฉพาะกับคำสั่ง DML INSERT, UPDATE และ DELETE เท่านั้น ไม่สามารถใช้ในขณะที่สร้างตารางหรือวางตารางได้เนื่องจากการดำเนินการเหล่านี้ถูกผูกมัดโดยอัตโนมัติในฐานข้อมูล

คำสั่ง BEGIN TRANSACTION

ธุรกรรมสามารถเริ่มต้นได้โดยใช้ BEGIN TRANSACTION หรือเพียงแค่คำสั่ง BEGIN ธุรกรรมดังกล่าวมักจะยังคงมีอยู่จนกว่าจะพบคำสั่ง COMMIT หรือ ROLLBACK ถัดไป แต่ธุรกรรมจะ ROLLBACK ด้วยหากฐานข้อมูลถูกปิดหรือหากเกิดข้อผิดพลาด

ต่อไปนี้เป็นไวยากรณ์ง่ายๆในการเริ่มต้นธุรกรรม -

BEGIN;

or

BEGIN TRANSACTION;

คำสั่ง COMMIT

คำสั่ง COMMIT เป็นคำสั่งธุรกรรมที่ใช้บันทึกการเปลี่ยนแปลงที่เรียกใช้โดยธุรกรรมไปยังฐานข้อมูล

คำสั่ง COMMIT บันทึกธุรกรรมทั้งหมดลงในฐานข้อมูลตั้งแต่คำสั่ง COMMIT หรือ ROLLBACK สุดท้าย

ไวยากรณ์สำหรับคำสั่ง COMMIT มีดังนี้ -

COMMIT;

or

END TRANSACTION;

คำสั่ง ROLLBACK

คำสั่ง ROLLBACK เป็นคำสั่งธุรกรรมที่ใช้ในการเลิกทำธุรกรรมที่ยังไม่ได้บันทึกลงในฐานข้อมูล

คำสั่ง ROLLBACK สามารถใช้ได้เฉพาะในการเลิกทำธุรกรรมตั้งแต่คำสั่ง COMMIT หรือ ROLLBACK ล่าสุดถูกเรียกใช้

ไวยากรณ์สำหรับคำสั่ง ROLLBACK มีดังนี้ -

ROLLBACK;

ตัวอย่าง

พิจารณาว่าตารางCOMPANYมีบันทึกต่อไปนี้ -

id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000

ตอนนี้ให้เราเริ่มต้นธุรกรรมและลบบันทึกจากตารางที่มี age = 25 และในที่สุดเราก็ใช้คำสั่ง ROLLBACK เพื่อยกเลิกการเปลี่ยนแปลงทั้งหมด

testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
ROLLBACK;

หากคุณจะตรวจสอบตาราง COMPANY ยังคงมีบันทึกต่อไปนี้ -

id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000

ตอนนี้ให้เราเริ่มการทำธุรกรรมใหม่และลบบันทึกจากตารางที่มี age = 25 และในที่สุดเราก็ใช้คำสั่ง COMMIT เพื่อยืนยันการเปลี่ยนแปลงทั้งหมด

testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
COMMIT;

หากคุณจะตรวจสอบตาราง COMPANY ก็ยังมีบันทึกต่อไปนี้ -

id | name  | age | address    | salary
----+-------+-----+------------+--------
  1 | Paul  |  32 | California |  20000
  3 | Teddy |  23 | Norway     |  20000
  5 | David |  27 | Texas      |  85000
  6 | Kim   |  22 | South-Hall |  45000
  7 | James |  24 | Houston    |  10000
(5 rows)