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