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)