Ответ
Плюсы:
- Гарантирует, что данные, прочитанные в транзакции, не изменятся другими транзакциями до её завершения.
- Уменьшает проблему "неповторяемого чтения" (non-repeatable read), так как другие транзакции не могут изменять уже прочитанные данные.
Минусы:
- Может привести к блокировкам, так как удерживает shared-блокировки на прочитанных данных до конца транзакции.
- Не защищает от фантомного чтения (phantom reads) — другие транзакции могут добавлять новые строки.
- Может снижать производительность из-за длительных блокировок.
Пример в SQL:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN TRANSACTION;
SELECT * FROM Users WHERE age > 20; -- Данные не изменятся другими транзакциями
COMMIT;