Hoàn tác giao dịch khi có lỗi
Ngay ngày đầu đi làm, bạn được giao nhiệm vụ thiết lập các giao dịch ghi nhận khi tiền được chuyển trong ngân hàng.
Bạn muốn chuẩn bị một script đơn giản chuyển $100 từ account_id = 1 sang account_id = 5. Sau đó, script sẽ ghi lại các biến động này vào bảng transactions. Bạn nghĩ mình đã viết đúng hết, nhưng là người cẩn thận, bạn muốn kiểm tra lại tất cả!
Thực tế là bạn đã mắc một lỗi. Thay vì chèn một giao dịch mới cho tài khoản 5, bạn lại chèn cho tài khoản 500, vốn không tồn tại.
Để ngăn lỗi về sau, script bạn tạo cần rollback mọi thay đổi nếu có lỗi xảy ra. Nếu mọi thứ chạy đúng, giao dịch phải được commit.
Bài tập này là một phần của khóa học
Giao dịch và Xử lý lỗi trong SQL Server
Hướng dẫn bài tập
- Bắt đầu giao dịch.
- Sửa lỗi trong thao tác.
- Commit giao dịch nếu không có lỗi.
- Bên trong khối
CATCH, roll back giao dịch.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
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