Окружающая среда: SQL SERVER 2008 R2, Windows.Две разные транзакции, обновляющие разные строки одной таблицы в одно и то же время
CONNECTION-1: выполнение следующих
BEGIN TRANSACTION
UPDATE Check_lock with (rowlock)
set LayoutType = 98
where USERID between 1 and 7;
WAITFOR DELAY '000:10:00';
COMMIT TRANSACTION;
CONNECTION-2: выполнение следующих
BEGIN TRANSACTION
UPDATE Check_lock with (rowlock)
set LayoutType = 98
where USERID between 15 and 20;
COMMIT TRANSACTION;
Постановка задачи: Я уверен, выполнение указанных сделок через SQL Server Management Studio с помощью делая одновременно два соединения с одним и тем же сервером/базой данных на одном компьютере. Хотя таблица такая же: & транзакции выполняются в одно и то же время (не на 100% в то же время, поскольку выполняется вручную), но при обновлении разных строк (блокировка на уровне строк), почему транзакция «Conneciton-2» не была немедленно передана и отправлена в ожидании, пока первая транзакция не будет выполнена/завершена. ??
Пожалуйста, дайте мне знать, если я не описал свой сценарий четко.
Добро пожаловать в SO, вы должны добавить тег SQL к своему вопросу и не помещать свой адрес электронной почты в вопрос (вместо этого вы можете добавить его в свой профиль!) – Awalias
Является ли 'USERID' индексированным? Используется ли индекс в плане выполнения? Если сканирование для поиска строк, соответствующих 'USERID между 15 и 20', будет заблокировано, ожидая, чтобы прочитать строки, заблокированные только первой транзакцией. –
Зачем вы вводите код «WAITFOR DELAY» 000: 10: 00 '; – bgs