SQLite - ธุรกรรม

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

เริ่มต้นคำสั่งการทำธุรกรรม

ธุรกรรมสามารถเริ่มต้นได้โดยใช้ 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;

Example

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

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

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

sqlite> BEGIN;
sqlite> DELETE FROM COMPANY WHERE AGE = 25;
sqlite> ROLLBACK;

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

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

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

sqlite> BEGIN;
sqlite> DELETE FROM COMPANY WHERE AGE = 25;
sqlite> COMMIT;

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

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
3           Teddy       23          Norway      20000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0