Tôi rất mới với SQL Server và muốn hiểu liệu select
câu lệnh đơn giản sau đây có thực hiện bất kỳ khóa nào không.
Select * from Student;
Vui lòng xem xét trường hợp câu lệnh sẽ không chạy trong một begin tran
khối.
Tôi rất mới với SQL Server và muốn hiểu liệu select
câu lệnh đơn giản sau đây có thực hiện bất kỳ khóa nào không.
Select * from Student;
Vui lòng xem xét trường hợp câu lệnh sẽ không chạy trong một begin tran
khối.
Câu trả lời:
Có, nó có một khóa chia sẻ trên các hàng mà nó đọc theo mặc định (nó cũng có một khóa chia sẻ ý định trên tất cả các trang của chỉ mục được nhóm mà nó sẽ đọc), điều này được thực hiện để ngăn chặn việc đọc bẩn. Tuy nhiên, có nhiều cách để bỏ qua điều này (SQL Server có gợi ý nolock). Nếu câu lệnh không nằm trong BEGIN TRAN, khóa sẽ được giải phóng sau khi câu lệnh SELECT chạy.
Thông tin thêm có thể được tìm thấy ở đây:
http://msdn.microsoft.com/en-us/l Library / ms184286 (v = sql.105) .aspx http://www.sqlteam.com/article/int sinhtion-to-locking-in-sql-server
Tôi muốn hiểu liệu sau đây, câu lệnh chọn rất đơn giản sẽ có bất kỳ khóa nào không
Một quan niệm sai lầm phổ biến là một SELECT
truy vấn chạy ở READ COMMITTED
mức cô lập giao dịch mặc định sẽ luôn lấy các khóa được chia sẻ để ngăn việc đọc bẩn.
SQL Server có thể tránh thực hiện các khóa cấp độ hàng được chia sẻ khi không có nguy cơ đọc dữ liệu không được cam kết mà không có chúng (mặc dù các khóa Intent-Shared (IS) cấp cao hơn vẫn được thực hiện).
Ngay cả khi các khóa hàng chia sẻ được thực hiện (có lẽ vì một giao dịch đồng thời khác đã sửa đổi trang được bật), chúng có thể được phát hành từ lâu trước khi SELECT
tuyên bố hoàn tất.
Trong hầu hết các trường hợp, hàng được 'mở khóa' ngay trước khi máy chủ xử lý hàng tiếp theo. Có những trường hợp trong đó các khóa chia sẻ được thực hiện ở mức cô lập mặc định được giữ ở cuối câu lệnh hiện tại, nhưng không đến cuối giao dịch .
Ghi đè mức cô lập hiện tại với NOLOCK
gợi ý bảng hầu như luôn là một ý tưởng tồi .
Khóa là một chi tiết thực hiện. SQL Server có các khóa khi cần thiết để đảm bảo đáp ứng các đảm bảo ngữ nghĩa được cung cấp bởi mức cô lập hiện tại . Chắc chắn có những lúc rất hữu ích để biết một chút về lý do tại sao các khóa được thực hiện, nhưng cố gắng dự đoán chúng là rất thường phản tác dụng.
SQL Server cung cấp nhiều mức độ cách ly khác nhau; chọn một trong đó cung cấp sự đảm bảo và hành vi mà người tiêu dùng dữ liệu của bạn cần.