Sebuah SELECT
di SQL Server akan menempatkan kunci bersama pada baris tabel - dan SELECT
second kedua juga memerlukan kunci bersama, dan kunci tersebut kompatibel satu sama lain.
Jadi tidak - satu SELECT
tidak dapat memblokir SELECT
. yang lain .
Apa WITH (NOLOCK)
petunjuk kueri digunakan untuk dapat membaca data yang sedang dalam proses disisipkan (oleh koneksi lain) dan yang belum di-commit.
Tanpa petunjuk kueri itu, SELECT
mungkin diblokir saat membaca tabel oleh INSERT
. yang sedang berlangsung (atau UPDATE
) pernyataan yang menempatkan eksklusif mengunci baris (atau mungkin seluruh tabel), hingga transaksi operasi tersebut telah dilakukan (atau dibatalkan).
Masalah WITH (NOLOCK)
petunjuknya adalah:Anda mungkin membaca baris data yang tidak akan disisipkan sama sekali, pada akhirnya (jika INSERT
transaksi dibatalkan) - jadi mis. report mungkin menampilkan data yang tidak pernah benar-benar di-commit ke database.
Ada petunjuk kueri lain yang mungkin berguna - WITH (READPAST)
. Ini menginstruksikan SELECT
perintah untuk melewatkan baris apa pun yang coba dibaca dan yang dikunci secara eksklusif. SELECT
tidak akan memblokir, dan itu tidak akan membaca data "kotor" yang tidak dikomit - tetapi mungkin melewatkan beberapa baris, mis. tidak menampilkan semua baris Anda di tabel.