Замки Привет всем, Я работаю над замками и пытаюсь их понять.Чтение строк и таблицы для обновления
Моей целью является также возможность блокировки строки во время ее обновления, но все же позволяющая пользователям читать ее из таблицы. В моем чтении я прочитал это
«Общие блокировки (S) разделяемых блокировки удерживаются на данных, считанных по пессимистической модели параллелизма. В то время как общая блокировка проходит другие транзакции могут читать, но не могут изменять заблокированные данных. "
Так что у меня это в одной транзакции.
BEGIN TRAN
USE AdventureWorks2008R2
UPDATE Person.Address
SET AddressLine2 = 'Test Address 2'
WHERE AddressId = 5
Теперь в следующей транзакции У меня есть одно и то же
BEGIN TRAN
USE AdventureWorks2008R2
UPDATE Person.Address
SET AddressLine2 = 'gar'
WHERE AddressId = 5
--ROLLback
Который не получает казнены, как я ожидал, но в другой транзакции, у меня есть
select * from AdventureWorks2008R2.Person.Address
Последнее transction Безразлично И я не уверен, почему. Поскольку он сказал, что я могу ПРОЧТИТЬ данные
Я также посмотрел на блокировку обновления, похоже, что она работает, потому что я не могу обновить строку, если я не прихожу или откатываю трансляцию. ОДНАКО, я не могу выбрать транзакцию. Мой единственный доступный вариант - использовать эксклюзивную блокировку и читать uncommitted? Просто ищет лучший способ блокировки обновляемой строки, но в то же время разрешить чтение этой строки и таблицы. Спасибо.
Используйте уровень изоляции моментальных снимков в своих транзакциях. – knkarthick24
Показать полный код. Вы совершаете и прекращаете транзакцию. Вы знаете, что одно обновление - это транзакция? – Paparazzi
@Blam Я не заканчиваю транзакции, я начинаю переходы и перехожу на другие сеансы и замечаю, что происходит, когда я пытаюсь получить доступ и обновить указанную строку. Протестировать его – Liberace