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

Възможно ли е принудително заключване на ниво ред в SQL Server?

Можете да използвате съвета ROWLOCK, но AFAIK SQL може да реши да го ескалира, ако ресурсите му се изчерпят

От doco:

ROWLOCK Указва, че заключванията на редове се вземат, когато обикновено се вземат заключвания на страница или таблица. Когато са посочени в транзакции, работещи на ниво SNAPSHOTisolation, заключванията на редове не се вземат, освен ако ROWLOCK не се комбинира с други подсказки за таблица, които изискват заключвания, като UPDLOCK и HOLDLOCK.

и

Подсказки за заключване ROWLOCK, UPDLOCK И XLOCK, които придобиват заключвания на ниво ред, могат да поставят заключвания на индексни ключове, а не на действителните редове с данни. Например, ако atable има неклъстериран индекс и оператор SELECT, използващ намек за заключване, управляван от покриващ индекс, заключване се придобива на ключа на индекса в покриващия индекс, а не на реда с данни в основната таблица.

И накрая, това дава доста задълбочено обяснение за ескалацията на заключване в SQL Server 2005, която беше променена в SQL Server 2008.

Има също, много задълбочено:Заключване в The Database Engine (в онлайн книги)

И така, като цяло

UPDATE
Employees WITH (ROWLOCK)
SET Name='Mr Bean'
WHERE Age>93

Би трябвало да е наред, но в зависимост от индексите и натоварването на сървъра може да ескалира до заключване на страница.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server, преобразуващ varbinary в низ

  2. Разлика между локални и глобални временни таблици в SQL Server

  3. Как да зададете име на първичен ключ в EF-Code-First

  4. Как да преместя таблица в схема в T-SQL

  5. Как да се свържа с база данни на SQL Server от JavaScript в браузъра?