[#] Короткая шпаргалка по блокировкам при чтении и изменении данных в зависимости от уровня изоляции транзакции в MSSQL
habrabot(difrex,1) — All
2016-07-14 14:00:07


**Read Uncommitted**

* если в одной транзакции поменять данные — селект этих данных (в другой транзакции или без транзакции) не будут ждать окончания первой транзакции и вернут записанные данные незакомиченных транзакций
* если в одной транзакции считать данные — апдейты этих данных в другой транзакции не будут ждать окончания первой транзакции
* шаред локи не используются. _Что аналогично установке NOLOCK хинта во все селекты в [Read Commited][1]_
* эксклюзивные локировки устанавливаются в процессе выполнения стейтмента и снимаются по окончанию транзакции

**Read Committed + read\_committed\_snapshot off**

(alter database xxx set read\_committed\_snapshot off)

* если в одной транзакции поменять данные — селект этих данных (в другой транзакции или без транзакции) будут ждать окончания первой транзакции. _Селект с NOLOCK хинтом вернёт изменённые, но не закомиченные данные._
* если в одной транзакции считать данные — апдейты этих данных в другой транзакции не будут ждать окончания первой транзакции
* шаред локировки устанавливаются в процессе работы стейтмента и снимаются по окончанию стейтмента
* эксклюзивные локировки устанавливаются в процессе выполнения стейтмента и снимаются по окончанию транзакции

[Дальше][2]

[1]: #Read Committed + read_committed_snapshot off
[2]: https://habrahabr.ru/post/305600/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut