Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Разбиране на ЗАКЛЮЧВАНЕТО на SQL Server при SELECT заявки

A SELECT в SQL Server ще постави споделено заключване на ред на таблица - и втори SELECT също ще изисква споделено заключване и те са съвместими едно с друго.

Така че не - един SELECT не може да блокира друг SELECT .

Какво е WITH (NOLOCK) Подсказката за заявка се използва, за да можете да четете данни, които са в процес на вмъкване (от друга връзка) и които все още не са заети.

Без този намек за заявка, SELECT може да бъде блокирано четенето на таблица от текущ INSERT (или UPDATE ) изявление, което поставя изключително заключване на редове (или евентуално цяла таблица), докато транзакцията на тази операция не бъде ангажирана (или връщане назад).

Проблем с WITH (NOLOCK) намек е:може да четете редове с данни, които изобщо няма да бъдат вмъкнати, в крайна сметка (ако INSERT транзакцията се връща назад) - така че напр. отчетът може да показва данни, които никога не са били въведени в базата данни.

Има още един намек за заявка, който може да е полезен - WITH (READPAST) . Това инструктира SELECT команда просто да пропусне всички редове, които се опитва да прочете и които са изключително заключени. SELECT няма да блокира и няма да чете никакви "мръсни" неангажирани данни - но може да пропусне някои редове, напр. не показва всичките си редове в таблицата.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използвайте FILEGROUP_ID(), за да върнете идентификатора на файлова група в SQL Server

  2. Като оператор в Entity Framework?

  3. Как да инсталирате Azure Data Studio на Mac

  4. Как да изпратите по имейл резултатите от заявка в SQL Server (T-SQL)

  5. Как да създадете ограничение CHECK в SQL Server (примери за T-SQL)