เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การ Rollback ทรานแซกชันเมื่อเกิดข้อผิดพลาด

ในวันแรกของการทำงาน คุณได้รับมอบหมายให้ตั้งค่าทรานแซกชันที่บันทึกการโอนเงินในระบบธนาคาร

คุณต้องการเขียนสคริปต์อย่างง่ายเพื่อโอนเงิน $100 จาก account_id = 1 ไปยัง account_id = 5 จากนั้นบันทึกรายการเคลื่อนไหวเหล่านั้นลงในตาราง transactions คุณคิดว่าเขียนทุกอย่างถูกต้องแล้ว แต่ด้วยความรอบคอบ จึงอยากตรวจสอบอีกครั้ง!

ปรากฏว่ามีข้อผิดพลาดเกิดขึ้นจริง แทนที่จะแทรกทรานแซกชันใหม่สำหรับ account 5 กลับแทรกเป็น account 500 ซึ่งไม่มีอยู่ในระบบ

เพื่อป้องกันข้อผิดพลาดในอนาคต สคริปต์ที่สร้างขึ้นควร rollback การเปลี่ยนแปลงทั้งหมดหากเกิดข้อผิดพลาด แต่หากทุกอย่างเป็นไปด้วยดี ทรานแซกชันก็ควร commit

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

Transactions and Error Handling in SQL Server

ดูคอร์ส

คำแนะนำการฝึกหัด

  • เริ่มต้นทรานแซกชัน
  • แก้ไขข้อผิดพลาดในการดำเนินการ
  • Commit ทรานแซกชันหากไม่มีข้อผิดพลาด
  • ภายในบล็อก CATCH ให้ Rollback ทรานแซกชัน

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

BEGIN TRY  
	-- Begin the transaction
	BEGIN ___;
		UPDATE accounts SET current_balance = current_balance - 100 WHERE account_id = 1;
		INSERT INTO transactions VALUES (1, -100, GETDATE());
        
		UPDATE accounts SET current_balance = current_balance + 100 WHERE account_id = 5;
        -- Correct it
		INSERT INTO transactions VALUES (500, 100, GETDATE());
    -- Commit the transaction
	___ TRAN;    
END TRY
BEGIN CATCH  
	SELECT 'Rolling back the transaction';
    -- Rollback the transaction
	___ ___;
END CATCH
แก้ไขและรันโค้ด