- •Работа с транзакциями в БД.
- •Уровень изолированности транзакций
- •Потерянное обновление
- •«Грязное» чтение read uncommited
- •Неповторяющееся чтение
- •Фантомная вставка (фантомное чтение)
- •Уровни изоляции
- •Поведение при различных уровнях изолированности
- •READ UNCOMMITTED
- •READ COMMITTED
- •REPEATABLE READ
- •SERIALIZABLE
Работа с транзакциями в БД.
ru.wikipedia.org
Уровень изолированности транзакций
Уровень изолированности транзакций — значение,
определяющее уровень, при котором в транзакции
допускаются несогласованные данные, то есть степень изолированности одной транзакции от другой.
Более высокий уровень изолированности повышает точность данных, но при этом может снижаться количество параллельно выполняемых транзакций.
Более низкий уровень изолированности позволяет выполнять больше параллельных транзакций, но снижает точность данных.
Потерянное обновление
В транзакции 1 изменяется значение поля f2,
Затем в транзакции 2 также изменяется значение этого поля.
В результате изменение, выполненное первой транзакцией, будет
потеряно.
«Грязное» чтение read uncommited
В транзакции 1 изменяется значение поля f2
Затем в транзакции 2 выбирается значение этого поля.
После этого происходит откат транзакции 1.
В результате значение, полученное второй транзакцией, будет отличаться от значения, хранимого в базе данных.
Неповторяющееся чтение
В транзакции 2 выбирается значение поля f2,
Затем в транзакции 1 изменяется значение поля f2.
При повторной попытке выбора значения из поля f2 в транзакции 2 будет получен другой результат.
Эта ситуация особенно неприемлема, когда данные считываются с целью их частичного изменения и обратной записи в базу данных.
Фантомная вставка (фантомное чтение)
Одним и тем же запросом в транзакции 2 выбираются разные строки, так как между ними оказалась операция INSERT другой транзакции.
Содержимое существующих строк при не изменялось, так что блокировка строк не может решить эту проблему.
Уровни изоляции
SERIALIZABLE (упорядочиваемость)
REPEATABLE READ (повторяемость чтения)
READ COMMITTED
(чтение фиксированных данных)
READ UNCOMMITTED
(чтение незафиксированных данных)
Поведение при различных уровнях изолированности
Фантомная |
Неповторяющее |
«Грязное» |
Потерянное |
вставка |
ся чтение |
чтение |
обновление |
SERIALIZABLE |
+ |
+ |
+ |
+ |
REPEATABLE |
- |
+ |
+ |
+ |
READ |
|
|
|
|
READ |
- |
- |
+ |
+ |
COMMITTED |
|
|
|
|
READ |
- |
- |
- |
+ (?) |
UNCOMMITTED |
|
|
|
|
READ UNCOMMITTED
Разрешается «грязное чтение».
Низший уровень изоляции.
Гарантирует только физическую целостность данных (отсутствие повреждений)
Для транзакции не устанавливается никакой блокировки, которая гарантировала бы целостность данных.
READ COMMITTED
Грязное чтение отсутствует
Тем не менее в процессе работы одной транзакции другая может быть успешно завершена и сделанные ею изменения зафиксированы. В итоге первая транзакция будет работать с другим набором данных. Это проблема неповторяемого чтения.
В Oracle и др. блокировки на чтение нет, вместо этого «читающая» транзакция получает ту версию данных, которая была актуальна в базе до начала «пишущей».