Пример 16.5. Уровень изоляции конкурирующей транзакции принят
по умолчанию (READ COMMITTED). На шаге 2 транзакция захватила дан-
ные чтением и блокирует работу с ними со стороны конкурирующей
транзакции (шаги 3, 5), которая, может лишь добавлять записи (шаг 7).
383
Лекция 16 Транзакции и блокировки
Пользователь user1 Пользователь user2
Конкурирующая транзакция
Текущая транзакция
USE basa_user2 USE basa_user2
BEGIN TRANSACTION TRA SET TRANSACTION ISOLATION
1.SELECT * FROM Товар LEVEL REPEATABLE READ
BEGIN TRANSACTION TRB
3.UPDATE ТоварSET 2.SELECT * FROM Товар
остаток=остаток+10 (захватывает данные)
WHERE КодТовара=4 4.SELECT * FROM Товар
(блокируется) (блокируется до окончания
5.DELETE FROM Товар конкурирующей транзакции)
WHERE КодТовара=4 6.UPDATE Товар SET
(блокируется) остаток=остаток+10 WHERE
7.INSERT Товар КодТовара=4 (выполняется,
(Название, остаток) т.к. данные захвачены
VALUES ('SS',999) текущей транзакцией)
(выполняется) 8.DELETE FROM Товар WHERE
КодТовара=4 (выполняется,
10.ROLLBACK т.к. данные захвачены
TRANSACTION TRA текущей транзакцией)
SELECT @@TRANCOUNT 9.INSERT Товар(Название,
остаток) VALUES ('SS',999)
(выполняется)
11.ROLLBACK TRANSACTION TRB
SELECT @@TRANCOUNT