Вернет ли подсказка SQL Server NOLOCK частично записанные строки?

StackOverflow https://stackoverflow.com/questions/1511356

  •  19-09-2019
  •  | 
  •  

Вопрос

Прежде всего, я не спрашиваю, следует или не следует использовать NOLOCK.Давайте оставим это в прошлом.

Я предполагаю, что вопрос сводится к тому, как sql server записывает данные?Записывается ли вся строка сразу или она записывается по столбцу за раз?

Я спрашиваю, потому что рассматривается подсказка NOLOCK.Грязное чтение нормально до тех пор, пока возвращается (или не возвращается) вся строка целиком.Частично записанные строки неприемлемы.

Это было полезно?

Решение

Нет.Операции модификации данных, такие как вставки, обновления и удаления, защищены низкоуровневыми физическими Защелки.Все операции доступа к данным, включая выбор без блокировки, обязаны соответствовать протоколу блокировки.В результате частичная запись никогда не будет видна ни одному читателю.

Другие советы

Нет, он не вернет частично записанные строки.NOLOCK означает только, что этот запрос не создаст новых блокировок.Это не означает, что он не будет соблюдать существующие блокировки, и sql server не будет делать ничего, что записывает данные, не получив предварительно блокировку.

Что он может сделать, так это вернуть строки, которые устарели или больше не актуальны, потому что что-то другое записало в строку, которая обычно была бы заблокирована этим запросом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top