Câu trả lời:
Họ là những điều tương tự. Nếu bạn sử dụng set transaction isolation level
câu lệnh, nó sẽ áp dụng cho tất cả các bảng trong kết nối, vì vậy nếu bạn chỉ muốn một nolock
trên một hoặc hai bảng, hãy sử dụng câu lệnh đó; nếu không thì sử dụng cái khác.
Cả hai sẽ cung cấp cho bạn đọc bẩn. Nếu bạn ổn với điều đó, thì hãy sử dụng chúng. Nếu bạn không thể có những bài đọc bẩn, thì hãy xem xét snapshot
hoặc serializable
gợi ý.
VỚI (NOLOCK) là một gợi ý ở cấp độ bảng. Đặt mức cô lập giao dịch thành READ_UNCOMMITTED với ảnh hưởng đến kết nối. Sự khác biệt là về phạm vi. Xem READUNCOMMITTED và NOLOCK trong tài liệu SQL Server tại đây:
http://technet.microsoft.com/en-us/library/ms187373.aspx
Đối với CẤP ĐỘ BAN HÀNH GIAO DỊCH: http://technet.microsoft.com/en-us/library/ms173763.aspx
Về hướng dẫn ... một tìm kiếm ngẫu nhiên từ StackOverflow và interweb điện ...
Theo hiểu biết của tôi, sự khác biệt duy nhất là phạm vi của các hiệu ứng như Strommy đã nói. NOLOCK gợi ý trên một bảng và ĐỌC KHÔNG ĐƯỢC ĐỀ XUẤT trong phiên.
Đối với các vấn đề có thể xảy ra, đó là tất cả về tính nhất quán. Nếu bạn quan tâm thì hãy lưu ý rằng bạn có thể nhận được những gì được gọi là đọc bẩn có thể ảnh hưởng đến dữ liệu khác bị thao túng trên thông tin không chính xác.
Cá nhân tôi không nghĩ rằng tôi đã gặp bất kỳ vấn đề nào từ điều này nhưng điều đó có thể nhiều hơn do cách tôi sử dụng nolock. Bạn cần lưu ý rằng có những trường hợp sử dụng được. Các tình huống trong đó bạn chủ yếu thêm dữ liệu mới vào bảng nhưng có một quy trình khác đi kèm để kiểm tra kịch bản dữ liệu. Điều đó có thể sẽ ổn vì quy trình chính không bao gồm việc quay lại và cập nhật các hàng trong quá trình đọc.
Ngoài ra, tôi tin rằng những ngày này bạn nên xem xét Kiểm soát đồng thời nhiều phiên bản. Tôi tin rằng họ đã thêm nó vào năm 2005 và nó giúp ngăn người viết chặn người đọc bằng cách cho người đọc xem nhanh cơ sở dữ liệu để sử dụng. Tôi sẽ bao gồm một liên kết và để lại nghiên cứu sâu hơn cho người đọc:
Vì bạn phải sử dụng WITH (NOLOCK) cho mỗi bảng, có thể khó chịu khi viết nó trong mỗi mệnh đề FROM hoặc JOIN. Tuy nhiên nó có lý do tại sao nó được gọi là đọc "bẩn". Vì vậy, bạn thực sự nên biết khi nào bạn thực hiện một thao tác và không đặt nó làm mặc định cho phạm vi phiên. Tại sao?
Quên WITH (NOLOCK) có thể không ảnh hưởng đến chương trình của bạn một cách quá nghiêm trọng, tuy nhiên, việc đọc bẩn nơi bạn không muốn có thể tạo ra sự khác biệt trong một số trường hợp nhất định.
Vì vậy, hãy sử dụng WITH (NOLOCK) nếu dữ liệu hiện tại đã chọn được phép không chính xác, vì nó có thể được khôi phục lại sau này. Điều này chủ yếu được sử dụng khi bạn muốn tăng hiệu suất và các yêu cầu về ngữ cảnh ứng dụng của bạn cho phép nó có nguy cơ hiển thị dữ liệu không nhất quán. Tuy nhiên, bạn hoặc người chịu trách nhiệm phải cân nhắc ưu và nhược điểm của quyết định sử dụng WITH (NOLOCK).
REPEATABLE READ
thay vìSERIALIZABLE
nếu bạn không quan tâm đến dữ liệu ảo.SERIALIZABLE
THỰC SỰ hạn chế và hầu như không bao giờ được sử dụng (ngoại trừ ví dụ: trong một số ứng dụng tài chính quan trọng).