Saya ingin memahami apakah pernyataan pilih berikut yang sangat sederhana ini akan mengambil kunci
Ini adalah kesalahpahaman umum bahwa SELECT
permintaan berjalan pada READ COMMITTED
tingkat isolasi transaksi default akan selalu mengambil kunci bersama untuk mencegah pembacaan kotor.
SQL Server dapat menghindari pengambilan kunci tingkat baris bersama ketika tidak ada bahaya membaca data yang tidak dikomit tanpa mereka (meskipun kunci Intent-Shared (IS) tingkat tinggi masih diambil).
Bahkan jika bersama baris kunci yang diambil (mungkin karena transaksi konkuren lain telah memodifikasi halaman baris adalah pada) mereka dapat dilepaskan jauh sebelum SELECT
Selesaikan pernyataan.
Dalam kebanyakan kasus, baris 'tidak terkunci' tepat sebelum server memproses baris berikutnya. Ada keadaan di mana kunci bersama diambil pada tingkat isolasi default diadakan sampai akhir pernyataan saat ini, tetapi tidak sampai akhir transaksi .
Mengganti level isolasi saat ini dengan NOLOCK
petunjuk tabel hampir selalu merupakan ide yang buruk .
Mengunci adalah detail implementasi. SQL Server mengambil kunci ketika diperlukan untuk memastikan memenuhi jaminan semantik yang disediakan oleh tingkat isolasi saat ini . Memang ada saat-saat di mana berguna untuk mengetahui sedikit tentang mengapa kunci diambil, tetapi upaya untuk memperkirakannya sering kali tidak produktif.
SQL Server menyediakan berbagai tingkat isolasi; pilih salah satu yang memberikan jaminan dan perilaku data yang dibutuhkan konsumen.