Что должно произойти, когда две транзакции сталкиваются?

Я должен реализовать транзакцию SQL в качестве моего назначения и показать, что я выбрал правильный уровень изоляции. Проблема в том, что я не уверен, что должно произойти, когда две транзакции сталкиваются, когда уровень изоляции является оптимальным. Я имею в виду, что я не знаю, должен ли один из них быть отменен из-за тупика или завершен успешно, но безрезультатно (получить откат?). Я использую MS SQL Server, если это имеет значение.

1 ответ

Решение

Когда транзакции находятся в ситуации взаимоблокировки, SQL Server выбирает одну из них как жертву тупика. Это означает, что транзакция жертвы будет отменена и откат, тогда как другая будет продолжаться, как будто ничего не произошло. SQL Server выбирает жертву в зависимости от сложности (стоимость процессора) отката изменений жертвы. Затем транзакция жертвы выдаст ошибку с кодом ошибки 1205, что является довольно явным.

Вы можете установить приоритеты взаимоблокировки транзакций самостоятельно, как описано во второй ссылке.

Подробнее здесь: http://technet.microsoft.com/en-us/library/ms178104(v=sql.105).aspx

И здесь: http://technet.microsoft.com/en-us/library/ms186736.aspx

Кстати, тот факт, что вы используете SQL Server, имеет большое значение! Некоторые другие СУБД просто будут держать транзакции в замке навсегда, а другие просто выберут ошибки обеих транзакций. Я никогда не слышал о такой, которая бы посчитала транзакции завершенными и откатила их, хотя...

Другие вопросы по тегам