Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Memahami SQL Server LOCKS pada kueri SELECT

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana mengatasi tidak dapat mengganti kesalahan penyandian saat memasukkan XML ke SQL Server

  2. Apa pentingnya 1/1/1753 di SQL Server?

  3. Ambil data dari prosedur tersimpan yang memiliki beberapa set hasil

  4. Jalankan skrip SQL besar (dengan perintah GO)

  5. Cara sederhana untuk mengubah urutan kolom dan baris dalam SQL?