2010-08-12 28 views

Trả lời

39

Tự hỏi mình câu hỏi sau: Sẽ là xấu nếu ai đó INSERT một hàng mới vào dữ liệu của bạn trong khi giao dịch của bạn đang chạy? Điều này có ảnh hưởng đến kết quả của bạn theo cách không thể chấp nhận được không? Nếu vậy, hãy sử dụng mức SERIALIZABLE.

Từ MSDN regarding SET TRANSACTION ISOLATION LEVEL:

SERIALIZABLE

Places một khóa phạm vi trên tập hợp dữ liệu, ngăn chặn những người dùng khác từ việc cập nhật hoặc chèn hàng vào tập dữ liệu đến khi giao dịch hoàn tất. Đây là mức hạn chế nhất của các mức cách ly . Bởi vì đồng thời thấp hơn, hãy sử dụng tùy chọn này chỉ khi cần thiết. Tùy chọn này có cùng tác dụng như đặt HOLDLOCK trên tất cả các bảng trong tất cả các phát biểu SELECT trong một giao dịch.

Vì vậy, giao dịch của bạn duy trì tất cả các khóa trong suốt cuộc đời - ngay cả những giao dịch thường bị hủy sau khi sử dụng. Điều này làm cho nó xuất hiện rằng tất cả các giao dịch đang chạy một tại một thời điểm, do đó tên SERIALIZABLE. Lưu ý từ Wikipedia regarding isolation levels:

SERIALIZABLE mức

cô lập này xác định rằng tất cả các giao dịch xảy ra trong một thời trang hoàn toàn cô lập; tức là, như thể tất cả các giao dịch trong hệ thống đã có thực hiện serially, một sau khác. DBMS chỉ có thể thực hiện hai hoặc nhiều giao dịch hơn cùng một lúc chỉ khi ảo ảnh về thực thi nối tiếp có thể được duy trì.

+0

Tham chiếu tốt, có liên quan: (có thể tuần tự hóa so với ảnh chụp nhanh) http://blogs.msdn.com/b/craigfr/archive/2007/05/16/serializable-vs-snapshot-isolation-level.aspx –

+0

Đây là liên kết được cập nhật cho ['SET TRANSACTION ISOLATION LEVEL' từ MSDN] (https://msdn.microsoft.com/en-us/library/ms173763.aspx) –

+0

@AlexYursha Cảm ơn bạn, tôi đã cập nhật bài đăng. –

3

Thử tính toán. Các giao dịch trong các tài khoản vốn có thể được tuần tự hóa nếu bạn muốn có các giá trị tài khoản thích hợp VÀ tuân theo những điều như giới hạn tín dụng.

Các vấn đề liên quan