Ответ - «это зависит».
NOLOCK разрешает «грязное чтение».Это означает, что в транзакции , вы можете увидеть незафиксированные данные из другой транзакции.Если у вас есть несколько потоков, обновляющих одну и ту же строку в одной и той же таблице, вы можете увидеть измененное значение данных, которых затронул другой поток, до того, как этот поток завершит свою транзакцию.
Например, возьмите таблицу account_balances, определенную как (account_num int, баланс десятичное (12,2)).Предположим, что происходит следующее:
// предварительное условие, баланс счета № 1 равен 10,00
- Поток № 1 начинает транзакцию, уменьшает счет № 1 на 10
- Поток № 2 запускает транзакцию, пытается прочитать остаток на счете № 1.Он читает баланс 0. 0. 1014 *
- Поток № 2 уменьшает счет на 5 долларов и выдает овердрафт клиенту (их баланс -5)
- Поток # 1 откатывает свою транзакцию
- Поток # 2 фиксирует свою транзакцию
// Баланс счета теперь -5, хотя он должен быть 5.
То, что вы выиграли 't see - это некоторая форма противоречивых данных в поле - подсказка nolock не похожа на выполнение многопоточного кода без блокировки - отдельные записи по-прежнему атомарны.