Пример. Вложенные транзакции

BEGIN TRAN

INSERT Товар (Название, остаток)

VALUES ('v',40)

BEGIN TRAN

INSERT Товар (Название, остаток)

VALUES ('n',50)

BEGIN TRAN

INSERT Товар (Название, остаток)

VALUES ('m',60)

ROLLBACK TRAN

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

Параллельная работа транзакций

Свойство И (изоляция) также не всегда выполняется в полном объеме. В идеале, транзакции разных пользователей не должны мешать друг другу (т.е. они должны выполняться так, чтобы у пользователя создавалась иллюзия, что он в системе один).

Простейший способ обеспечить абсолютную изолированность состоит в том, чтобы выстроить транзакции в очередь и выполнять их строго одну за другой. Очевидно, при этом теряется эффективность работы системы. Таким образом, транзакции необходимо выполнять одновременно, но так, чтобы результат был бы такой же, как и при выполнении их по очереди.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: