T-SQL - ธุรกรรม

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

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

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

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

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

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

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

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

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

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

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

  • COMMIT - เพื่อบันทึกการเปลี่ยนแปลง

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

  • SAVEPOINT - สร้างคะแนนภายในกลุ่มของธุรกรรมที่จะ ROLLBACK

  • SET TRANSACTION - ตั้งชื่อในการทำธุรกรรม

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

ในการใช้คำสั่งควบคุมธุรกรรมใน MS SQL Server เราต้องเริ่มทำธุรกรรมด้วยคำสั่ง 'begin tran' หรือคำสั่งเริ่มต้นธุรกรรมมิฉะนั้นคำสั่งเหล่านี้จะไม่ทำงาน

คอมมิตคำสั่ง

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

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์สำหรับคำสั่ง COMMIT

COMMIT;

ตัวอย่าง

พิจารณาตารางลูกค้าที่มีระเบียนต่อไปนี้

ID  NAME       AGE       ADDRESS           SALARY 
1   Ramesh     32        Ahmedabad         2000.00 
2   Khilan     25        Delhi             1500.00 
3   kaushik    23        Kota              2000.00 
4   Chaitali   25        Mumbai            6500.00 
5   Hardik     27        Bhopal            8500.00 
6   Komal      22        MP                4500.00 
7   Muffy      24        Indore            10000.00

ตัวอย่างคำสั่งต่อไปนี้จะลบเร็กคอร์ดจากตารางที่มี age = 25 จากนั้นจึงยอมรับการเปลี่ยนแปลงในฐานข้อมูล

Begin Tran 
DELETE FROM CUSTOMERS 
   WHERE AGE = 25 
COMMIT

ด้วยเหตุนี้สองแถวจากตารางจะถูกลบและคำสั่ง SELECT จะให้ผลลัพธ์ดังต่อไปนี้

ID  NAME       AGE       ADDRESS           SALARY 
1   Ramesh     32        Ahmedabad         2000.00
3   kaushik    23        Kota              2000.00
5   Hardik     27        Bhopal            8500.00 
6   Komal      22        MP                4500.00 
7   Muffy      24        Indore            10000.00

คำสั่ง ROLLBACK

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

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์สำหรับคำสั่ง ROLLBACK

ROLLBACK

ตัวอย่าง

พิจารณาตารางลูกค้าที่มีระเบียนต่อไปนี้

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00 
4   Chaitali   25        Mumbai             6500.00 
5   Hardik     27        Bhopal             8500.00 
6   Komal      22        MP                 4500.00 
7   Muffy      24        Indore             10000.00

ตัวอย่างคำสั่งต่อไปนี้จะลบเร็กคอร์ดจากตารางที่มี age = 25 จากนั้น ROLLBACK การเปลี่ยนแปลงในฐานข้อมูล

Begin Tran 
DELETE FROM CUSTOMERS 
   WHERE AGE = 25; 
ROLLBACK

ดังนั้นการดำเนินการลบจะไม่ส่งผลกระทบต่อตารางและคำสั่ง SELECT จะให้ผลลัพธ์ดังต่อไปนี้

ID  NAME       AGE       ADDRESS          SALARY 
1   Ramesh     32        Ahmedabad        2000.00 
2   Khilan     25        Delhi            1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00

คำสั่ง SAVEPOINT

SAVEPOINT เป็นจุดหนึ่งในการทำธุรกรรมเมื่อคุณสามารถหมุนธุรกรรมกลับไปที่จุดหนึ่งโดยไม่ต้องย้อนกลับธุรกรรมทั้งหมด

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์สำหรับคำสั่ง SAVEPOINT

SAVE TRANSACTION SAVEPOINT_NAME

คำสั่งนี้ใช้เฉพาะในการสร้าง SAVEPOINT ท่ามกลางคำสั่งธุรกรรม คำสั่ง ROLLBACK ใช้เพื่อเลิกทำกลุ่มธุรกรรม

ต่อไปนี้เป็นไวยากรณ์สำหรับการย้อนกลับไปที่ SAVEPOINT

ROLLBACK TO SAVEPOINT_NAME

ในตัวอย่างต่อไปนี้เราจะลบระเบียนที่แตกต่างกันสามรายการออกจากตาราง CUSTOMERS เราจะต้องสร้าง SAVEPOINT ก่อนการลบแต่ละครั้งเพื่อให้เราสามารถ ROLLBACK ไปยัง SAVEPOINT ได้ตลอดเวลาเพื่อคืนข้อมูลที่เหมาะสมให้กลับสู่สถานะเดิม

ตัวอย่าง

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

ID  NAME       AGE       ADDRESS          SALARY 
1   Ramesh     32        Ahmedabad        2000.00 
2   Khilan     25        Delhi            1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00

ต่อไปนี้เป็นชุดปฏิบัติการ -

Begin Tran 
SAVE Transaction SP1 
Savepoint created. 
DELETE FROM CUSTOMERS WHERE ID = 1  
1 row deleted. 
SAVE Transaction SP2 
Savepoint created. 
DELETE FROM CUSTOMERS WHERE ID = 2 
1 row deleted.
SAVE Transaction SP3 
Savepoint created. 
DELETE FROM CUSTOMERS WHERE ID = 3 
1 row deleted.

อย่างไรก็ตามการลบสามครั้งเกิดขึ้นเราเปลี่ยนใจและตัดสินใจที่จะ ROLLBACK ไปที่ SAVEPOINT ที่เราระบุว่าเป็น SP2 เนื่องจาก SP2 ถูกสร้างขึ้นหลังจากการลบครั้งแรกการลบสองครั้งสุดท้ายจะถูกยกเลิก -

ROLLBACK Transaction SP2 
Rollback complete.

สังเกตว่ามีเพียงการลบครั้งแรกเท่านั้นที่เกิดขึ้นตั้งแต่เราย้อนกลับไปที่ SP2

SELECT * FROM CUSTOMERS

เลือก 6 แถว

ID  NAME       AGE       ADDRESS          SALARY 
2   Khilan     25        Delhi        1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00

คำสั่ง SET TRANSACTION

คำสั่ง SET TRANSACTION สามารถใช้เพื่อเริ่มต้นธุรกรรมฐานข้อมูล คำสั่งนี้ใช้เพื่อระบุลักษณะสำหรับธุรกรรมที่ตามมา

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์สำหรับ SET TRANSACTION

SET TRANSACTION ISOLATION LEVEL <Isolationlevel_name>