Skip to content

Commit e5dcc45

Browse files
authored
Update transactions.md
1 parent 001c5f2 commit e5dcc45

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

code_reading/sql/transactions.md

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,17 @@ COMMIT;
5252

5353
## Ожидаемые ответы
5454
1. Возможна проблема “Lost Update” (потерянное обновление)
55-
Клиент A уменьшает stock = 5 - 3 = 2, но клиент B видит старое значение stock = 5 и выполняет stock = 5 - 4 = 1.
56-
В итоге вместо 2 единиц на складе остается -1 (ошибка)!
55+
- Клиент A уменьшает stock = 5 - 3 = 2, но клиент B видит старое значение stock = 5 и выполняет stock = 5 - 4 = 1.
56+
- В итоге вместо 2 единиц на складе остается -1 (ошибка)!
5757
2. В зависимости от уровня изоляции возможны аномалии:
58-
READ UNCOMMITTED / READ COMMITTED – клиент B видит “устаревшие” данные, что приводит к ошибке.
59-
REPEATABLE READ – клиент B не сможет увидеть обновленный stock клиента A, но проблема не решается полностью.
60-
SERIALIZABLE – запросы будут выполняться по очереди, исключая проблему.
61-
3. Как избежать проблемы:
62-
Использовать SELECT ... FOR UPDATE
63-
Применять уровень изоляции SERIALIZABLE или REPEATABLE READ
64-
Оптимистичные блокировки (проверка stock перед UPDATE)
65-
4. Лучший уровень изоляции:
66-
Если конкуренция высокая → SELECT ... FOR UPDATE + REPEATABLE READ
67-
Если важна строгость → SERIALIZABLE (но возможны блокировки)
58+
- READ UNCOMMITTED / READ COMMITTED – клиент B видит “устаревшие” данные, что приводит к ошибке.
59+
- REPEATABLE READ – клиент B не сможет увидеть обновленный stock клиента A, но проблема не решается полностью.
60+
- SERIALIZABLE – запросы будут выполняться по очереди, исключая проблему.
61+
4. Как избежать проблемы:
62+
- Использовать SELECT ... FOR UPDATE
63+
- Применять уровень изоляции SERIALIZABLE или REPEATABLE READ
64+
- Оптимистичные блокировки (проверка stock перед UPDATE)
65+
5. Лучший уровень изоляции:
66+
- Если конкуренция высокая → SELECT ... FOR UPDATE + REPEATABLE READ
67+
- Если важна строгость → SERIALIZABLE (но возможны блокировки)
68+

0 commit comments

Comments
 (0)