Ответ
Repeatable Read — это уровень изоляции транзакций, который гарантирует, что любые строки, прочитанные в течение транзакции, не будут изменены другими транзакциями до её завершения. Это предотвращает неповторяющиеся чтения. Однако фантомные чтения (появление новых строк) всё ещё возможны.
Пример на SQL (PostgreSQL):
-- Сессия 1: Устанавливаем уровень изоляции и начинаем транзакцию
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN;
-- Первое чтение баланса
SELECT balance FROM accounts WHERE id = 1;
-- Результат: 100
-- В это время Сессия 2 выполняет и коммитит:
-- UPDATE accounts SET balance = 200 WHERE id = 1;
-- Повторное чтение в Сессии 1 покажет старое значение
SELECT balance FROM accounts WHERE id = 1;
-- Результат: 100 (значение не изменилось, неповторяющееся чтение предотвращено)
COMMIT;
-- После коммита последующие запросы увидят новое значение (200).
Почему это важно? Этот уровень обеспечивает консистентность данных для операций, которые несколько раз читают одни и те же строки (например, для проверок и вычислений). Реализация обычно использует блокировки диапазонов ключей или механизм многоверсионности (MVCC) для удержания снапшота данных.