Транзакция гарантирует, что грязные чтения не происходят?

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

При работе с SQLite представьте следующий поток:

  1. начать транзакцию SQLite
  2. выполнить оператор select на соединении SQLite для возврата значений
  3. если на возвращаемых значениях выполняется условие, переходите к шагу № 4, в противном случае переходите к шагу № 5
  4. сделать обновление
  5. совершить транзакцию SQLite

Если два потока выполняют один и тот же код, существует ли вероятность того, что в одном из потоков может быть получено то, что называется "грязным чтением", между этапом № 3 и этапом № 4 другой поток может запустить обновление (этап № 4)?

1 ответ

Решение

Да, это называется уровнем изоляции: https://www.sqlite.org/isolation.html

Другие вопросы по тегам