Уточнение уровня изоляции транзакции - PullRequest
1 голос
/ 17 февраля 2011

Прав ли я в следующем?

Транзакция в Serializable IsolationLevel устанавливает блокировки чтения для операторов выбора.Есть две транзакции, выбирающие некоторый диапазон.Оба получают блокировки чтения.Но затем сначала транзакция обновляет или добавляет новое значение в выбранный диапазон и фиксирует.Что будет со второй транзакцией?Произойдет ли сбой, если попытается обновить или добавить значение в выбранном диапазоне после совершения первой транзакции?

Ответы [ 2 ]

2 голосов
/ 17 февраля 2011

Вы не говорите RDBMS, поэтому я предполагаю простую схему блокировки с S и X блокировками.Вы говорите.

Транзакция в Serializable IsolationLevel устанавливает блокировки чтения для операторов выбора.Есть две транзакции, выбирающие некоторый диапазон.Оба получают блокировки чтения.

Но затем первая транзакция обновляет или добавляет новое значение в выбранном диапазоне и фиксирует.

Это было бы невозможно, если вторая транзакция уже имеет блокировку чтения в диапазоне.Придется подождать, пока вторая транзакция не снимет свою блокировку.Если вторая транзакция также попытается обновить диапазон, это приведет к взаимоблокировке.

0 голосов
/ 17 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...