Что такое транзакция?
233
IF <Предыдущим выражением была изменена ровно одна строка> THEN
/* Внести деньги на следующий счет */
UPDATE account SET avail_balance = avail_balance + 500
WHERE account_id = 9989;
IF <Предыдущим выражением была изменена ровно одна строка> THEN
/* Все получилось, сделать изменения постоянными */
COMMIT;
ELSE
/* Чтото не так, отменить все изменения, сделанные в данной транзакции */
ROLLBACK;
END IF;
ELSE
/* Недостаток средств на счете или при обновлении возникла ошибка */
ROLLBACK;
END IF;
Хотя предыдущий фрагмент кода может показаться похожим
на один из процедурных языков программирования, предостав
ляемых основными компаниямипроизводителями БД,
такими
как PL/SQL от Oracle или Transact SQL от Microsoft, он написан
на псевдокоде и не пытается имитировать ни один конкретный
язык.
Приведенный выше фрагмент кода начинается с запуска транзакции.
После этого делается попытка удалить 500 долларов с текущего счета
и затем добавить 500 долларов на сберегательный счет. Если все про
ходит хорошо, транзакция фиксируется; однако если чтото не так,
происходит откат транзакции, т. е. все внесенные с начала транзакции
изменения отменяются.
С помощью транзакции
программа гарантирует, что пятьсот долларов
или останутся на сберегательном счету, или перейдут на текущий счет
без какойлибо возможности краха. Независимо от того, была ли тран
закция зафиксирована или произошел откат, все ресурсы, занятые
(например, блокировка записи) во время выполнения транзакции, по
завершении транзакции высвобождаются.
Конечно, если программе удается
завершить оба выражения
update
, но
сервер выключается до того, как смогут выполниться
commit
или
roll
back
, откат транзакции произойдет, когда сервер вернется в рабочий
режим. (Одна из задач, которую должен выполнить сервер перед воз
вращением в нормальный режим работы, – найти все незавершенные
транзакции, запущенные на момент выключения сервера, и
выпол
нить их откат.)
Достарыңызбен бөлісу: