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