Проверяет понимание транзакционных гарантий и проблем конкурентного доступа.
REPEATABLE READ гарантирует, что данные, прочитанные в транзакции, остаются неизменными до её завершения. Защищает от грязного чтения (чтение некоммитнутых данных) и неповторяющегося чтения (изменение данных другим транзакциями).
Проблемы, которые решает:
Dirty Read: Чтение данных из незавершённой транзакции (заблокировано на всех уровнях, кроме READ UNCOMMITTED).
Non-Repeatable Read: Ситуация, когда повторное чтение тех же строк возвращает изменённые данные (например, баланс счёта изменился после первого чтения).
Как работает:
СУБД (MySQL, PostgreSQL) использует версионирование данных или блокировки.
Пример:
START TRANSACTION;
SELECT * FROM books WHERE author_id = 1; -- Фиксирует "снимок" данных
-- Другие транзакции НЕ могут изменять эти строки до COMMIT
UPDATE books SET price = 100 WHERE author_id = 1;
COMMIT;Ограничения:
Не защищает от фантомного чтения (появление новых строк). Для этого нужен SERIALIZABLE.
Вывод: Используйте для финансовых операций, где важно сохранение состояния данных на момент начала транзакции.