Sobes.tech
Senior
54

Երկու գործարքներ՝ մեկը կարդում է, մյուսը թարմացնում է նույն տվյալները։ Ի՞նչ կլինի։ Անկրկնվող ընթերցման խնդիր և Repeatable Read անջատման մակարդակ։

Ընկերությունները, որտեղ հարցրել են
SSP Soft

Պատասխան AI-ից

sobes.tech AI

Если две транзакции работают с одними и теми же данными — одна читает, другая обновляет — возможны проблемы с согласованностью данных.

Проблема неповторяемого чтения (Non-repeatable Read): транзакция читает одни и те же данные дважды, но между чтениями другая транзакция изменила эти данные. В итоге первый транзакция видит разные значения при повторном чтении.

Уровень изоляции Repeatable Read гарантирует, что данные, прочитанные транзакцией, не будут изменены другими до её завершения. Это достигается блокировками или версионным контролем:

  • При чтении данные блокируются для записи другими транзакциями.
  • Повторное чтение возвращает те же данные, что и первый раз.

Пример на SQL:

-- Транзакция 1
BEGIN TRANSACTION;
SELECT * FROM accounts WHERE id = 1; -- читает баланс
-- Транзакция 2
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance + 100 WHERE id = 1;
COMMIT;
-- Транзакция 1
SELECT * FROM accounts WHERE id = 1; -- при Repeatable Read вернёт тот же баланс, что и первый раз
COMMIT;

Таким образом, Repeatable Read предотвращает неповторяемое чтение, но не гарантирует отсутствие фантомных чтений (новых строк, добавленных другой транзакцией).