13 lines
1.8 KiB
SQL
13 lines
1.8 KiB
SQL
-- Задание 1: Разбери ситуацию
|
|
-- 1) 200
|
|
-- 2) 100
|
|
-- 3) Результаты разные тк на уровне Read Committed разрешено неповторяемое чтение, а на уровне Repeatable Read неповторяемое чтенине запрщено, и мы видим то, что было на момент начала транщакции.
|
|
|
|
-- Задание 2: Практика
|
|
-- При Repeatable Read, я увидел во втором select значение - 100, потому что изменение произошли до того как завершилась транзакция с чтением, и зафиксировалось то значение которые было на момент начала транзакции с чтением
|
|
-- При Read Committed, во втором select было значение - 200, тк этот уровень изолированности подразумевает чтение закоммиченных(другой транзакцией) данных даже если текущая транзакция ещё не завершена
|
|
|
|
-- Задание 3: Найди ошибку
|
|
-- 1) Так произошло потому, что выбран некорректный уровень изоляции.
|
|
-- 2) Тут подойдет serializavle.
|
|
-- 3) Решить эту проблему без смены изоляции можно с помощью проверки баланса перед списанием, и если денег на балансе будет недостаточно, то откатить транзакцию. Такое решение подойдет только с уровнем изоляции Read Commited, для Repeatable Read такой способ уже не подойдет. |