Уровни изоляции в базах данных определяют, насколько транзакции изолированы друг от друга и от изменений, сделанных другими транзакциями. Они предотвращают различные проблемы параллельного доступа.
Классификация уровней изоляции (стандарт SQL):
- READ UNCOMMITTED
- Разрешает чтение незафиксированных изменений (грязное чтение / dirty read).
- Проблемы: грязное чтение, неповторяемое чтение, фантомное чтение.
- READ COMMITTED
- Разрешает чтение только зафиксированных изменений.
- Запрещает грязное чтение.
- Проблемы: неповторяемое чтение, фантомное чтение.
- Наиболее часто используемый уровень по умолчанию.
- REPEATABLE READ
- Гарантирует, что повторное чтение одного и того же набора строк в одной транзакции вернет те же данные, даже если другие транзакции изменят их.
- Запрещает грязное чтение и неповторяемое чтение.
- Проблема: фантомное чтение (появление новых строк, соответствующих условию выборки).
- SERIALIZABLE
- Наивысший уровень изоляции.
- Гарантирует полное отсутствие проблем параллельного доступа. Транзакции выполняются так, как если бы они выполнялись последовательно.
- Запрещает грязное чтение, неповторяемое чтение и фантомное чтение.
- Может иметь значительное влияние на производительность.
Проблемы параллельного доступа:
| Проблема | READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE |
|---|
| Грязное чтение | Да | Нет | Нет | Нет |
| Неповторяемое чтение | Да | Да | Нет | Нет |
| Фантомное чтение | Да | Да | Да | Нет |
Выбор уровня изоляции зависит от требований к приложению и компромисса между целостностью данных и производительностью.