SQL Server Update Locks

If you have the following sql, is it possible that if it is run multiple times by many different processes at exactly the same time, that two or more processes may update the table?

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
UPDATE table
SET Column1 = 1
WHERE Column1 = 0

No other locks etc are specified in the sql, other that Read Uncommitted.

I'm trying to track down an issue, and I'm now clutching at straws...

1 ответ

Получил это от MSDN.

Транзакции, выполняющиеся на уровне READ UNCOMMITTED, не создают общих блокировок, чтобы другие транзакции не могли изменять данные, считываемые текущей транзакцией. Транзакции READ UNCOMMITTED также не блокируются исключительными блокировками, которые не позволяют текущей транзакции читать строки, которые были изменены, но не зафиксированы другими транзакциями. Когда эта опция установлена, возможно чтение незафиксированных изменений, которые называются грязными чтениями. Значения в данных могут быть изменены, и строки могут появляться или исчезать в наборе данных до конца транзакции. Этот параметр имеет тот же эффект, что и установка NOLOCK для всех таблиц во всех инструкциях SELECT в транзакции. Это наименее ограничивающий уровень изоляции.

Так что в основном это эквивалент SQL Server, подсказка NOLOCK. Это может привести к неправильному чтению, т. Е. Если какой-либо процесс обновит 1000 записей и обновит 500 до настоящего времени, а другой процесс прочитает эти данные, данные могут быть в несогласованном виде. Это также помогает в выполнении обновления без блокировки (общая блокировка) несколькими запросами на выборку.

Надеюсь, что это имеет смысл в вашем вопросе. Для справки - MSDN

Другие вопросы по тегам