Транзакция гарантирует, что грязные чтения не происходят?
В последнее время я много читаю, и теперь я очень смущен тем, как работают транзакции и блокировки и как они связаны друг с другом.
При работе с SQLite представьте следующий поток:
- начать транзакцию SQLite
- выполнить оператор select на соединении SQLite для возврата значений
- если на возвращаемых значениях выполняется условие, переходите к шагу № 4, в противном случае переходите к шагу № 5
- сделать обновление
- совершить транзакцию SQLite
Если два потока выполняют один и тот же код, существует ли вероятность того, что в одном из потоков может быть получено то, что называется "грязным чтением", между этапом № 3 и этапом № 4 другой поток может запустить обновление (этап № 4)?
1 ответ
Решение
Да, это называется уровнем изоляции: https://www.sqlite.org/isolation.html