Chương này giới thiệu về các giao tác trong SQL Server. Nội dung chính được trình bày trong chương này gồm có: tính chất của giao tác, giao tác tường minh (explicit), điểm lưu (save point), giao không tường minh (implicit), giao tác tự động (autocommit), giao tác lồng nhau,... Mời các bạn cùng tham khảo.
GIAO TÁC TRONG SQL SERVER Phan Hiền GIAO TÁC (TRANSACTION) Khái niệm Giao tác hiểu khái niệm tập lệnh thực có gắn kết với coi đơn vị hoạt động, chúng thành công tất thành cơng thất bại có phần tử thất bại TÍNH CHẤT CỦA GIAO TÁC Tính ngun tử (Atomicty) Thành cơng tất thành cơng Tính qn (Consistency) Vẫn đảm bảo ràng buộc Tính lập (Isolation) Thể mức độ riêng tư giao tác (Một giao tác thay đổi bên ngồi thấy hay khơng thấy) Tính bền vững (Durability) Khi hệ thống có lỗi, thành cơng giao tác ghi vào liệu GIAO TÁC TƯỜNG MINH (EXPLICIT) Giao tác Begin tran [tên_giao_tác] lệnh | khối_lệnh { Commit tran | Rollback tran } [tên_giao_tác] Tạo điểm lưu save tran tên_điểm_lưu Hủy sau điểm lưu rollback ĐIỂM LƯU (SAVE POINT) begin tran t1 lệnh | khối_lệnh save tran s1 lệnh | khối_lệnh rollback tran s1 => chưa chấm dứt t1 lệnh | khối_lệnh commit tran t1 => Rollback tran s1 hủy bỏ kết sau lệnh save tran s1 tiếp tục làm tiếp (giao tác t1 còn) GT KHÔNG TƯỜNG MINH (IMPLICIT) Bắt đầu giao tác với lệnh ALTER TABLE, DROP, TRUNCATE TABLE, CREATE, OPEN, FETCH, REVOKE, GRANT DELETE, INSERT, SELECT, UPDATE Kết thúc lệnh : commit | rollback tran Khi kết thúc lúc bắt đầu giao tác Thiết lập thông số chấp nhận SET IMPLICIT_TRANSACTIONS ON|OFF GIAO TÁC TỰ ĐỘNG (AUTOCOMMIT) Cơ chế tự động xác nhận thực thi giao tác xuất lỗi lúc chạy hay lỗi cú pháp Lỗi cú pháp == giao tác bị hủy (rollback) Lỗi lúc chạy (khóa chính, sai liệu,…) == giao tác chấp nhận đến thời điểm GIAO TÁC LỒNG NHAU Cho phép giao tác lồng với Lệnh commit có tác dụng cho giao tác cấp ‘con’ gần Lệnh rollback tran có tác dụng hủy tất trở điểm ban đầu giao tác cấp ‘cha’ Biến @@trancount xem vào thời điểm có giao tác tồn GIAO TÁC LỒNG NHAU Begin tran t1 …… begin tran t2 ………… print @@trancount => kết commit tran t2 …… print @@trancount => kết commit tran t1 TRẠNG THÁI KHI ĐỌC Dirty read Đọc liệu mà giao tác khác chưa commit Non repeatable read (Non Rep | Lost Update) Giao tác đọc lần đầu thấy liệu A, sau đọc lại thấy B (do giao tác khác thay đổi) Phantom read Khi giao tác đọc liệu, bên ngồi hay giao tác khác thêm dịng vào hay xóa đi, làm cho dịng đọc trở thành dịng ảo (phantom) 10 MỨC ĐỘ CƠ LẬP (ISOLATION) ISOLATION LEVEL DIRTY READ Read uncommitted √ Read committed Repeatable read NON PHANTOM REPEATED READ √ √ √ √ √ Serializable 11 MỨC ĐỘ CÔ LẬP (ISOLATION) Thiết lập mức độ SET TRANSACTION ISOLATION LEVEL { read uncommitted | read committed | repeatable read | serializable } BEGIN TRAN …… 12 ... (Durability) Khi hệ thống có lỗi, thành cơng giao tác ghi vào liệu GIAO TÁC TƯỜNG MINH (EXPLICIT) Giao tác Begin tran [tên _giao_ tác] lệnh | khối_lệnh { Commit tran | Rollback tran } [tên _giao_ tác] Tạo... == giao tác bị hủy (rollback) Lỗi lúc chạy (khóa chính, sai liệu,…) == giao tác chấp nhận đến thời điểm GIAO TÁC LỒNG NHAU Cho phép giao tác lồng với Lệnh commit có tác dụng cho giao tác. .. liệu mà giao tác khác chưa commit Non repeatable read (Non Rep | Lost Update) Giao tác đọc lần đầu thấy liệu A, sau đọc lại thấy B (do giao tác khác thay đổi) Phantom read Khi giao tác đọc