Каждый оператор на сервере sql выполняется в транзакции. Если вы явно не запускаете один, сервер запускает один для каждого оператора и фиксирует его, если оператор выполнен успешно, и откатывает его, если это не так.
Точная блокировка, которую вы увидите с помощью update
, к сожалению, зависит. Он начнется с блокировок строк, но, скорее всего, он будет увеличен как минимум до нескольких блокировок страниц в зависимости от количества обновляемых строк. Полное повышение уровня блокировки таблицы маловероятно, но это в некоторой степени зависит от вашего сервера - SQL Server повысит его, если блокировки страниц используют слишком много памяти.
Если ваш select
запускается с nolock
, то вы получите грязное чтение, если вам удастся выбрать какие-либо строки, которые участвуют в обновлении. Это означает, что вы будете читать непереданные данные, и они могут не соответствовать другим строкам (так как они, возможно, еще не были обновлены).
Для всех других случаев, если ваш оператор встречает строку, участвующую в обновлении, или строку на заблокированной странице (при условии, что блокировка была повышена), тогда оператору придется ждать завершения update
. *