Скачиваний:
147
Добавлен:
02.05.2014
Размер:
2.66 Mб
Скачать

3.8. Транзакции

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

4 Следующая цитата из одной недавно вышедшей книги демонстрирует некоторые недора- зумения, обсуждаемые здесь, а также недоразумения, которые обсуждались в разделе 3.3. "Важно различать хранимые отношения, которые являются таблицами, и виртуальные отно- шения, которые являются представлениями... [Мы] будем использовать термин отношение только в тех случаях, когда вместо него можно использовать термин "таблица" или "представление ". Если необходимо будет подчеркнуть, что данное отношение является храни- мым отношением, а не представлением, то в этом случае мы будем использовать термин базо- вое отношение или базовая таблица " Подобные цитаты, к сожалению, — не редкость

В главе 1 указывалось, что транзакция — это логическая единица работы, обычно включающая несколько операций над базой данных. Также отмечалось, что пользователь должен иметь возможность указать системе, что отдельные операции являются частью одной транзакции. Для этого используются операции BEGIN TRANSACTION, COMMIT и ROLLBACK. Как правило, транзакция начинается при выполнении операции BEGIN TRANSACTION и прекращается при выполнении операции COMMIT или ROLLBACK, как в сле- дующем примере, написанном на псевдокоде.

BEGIN TRANSACTION ; UPDATE account A ; UPDATE account В ;

/* Перевести $$$ со счета А на счет В */ /* Снятие денег со счета А */ /* Помещение денег на счет В */

IF <Все выполнено успешно

THEN COMMIT ;

ELSE ROLLBACK :

/* Нормальное завершение */ /* Аварийное завершение */

END IF ;

Отметим некоторые свойства транзакций.

  1. Транзакции заведомо атомарны, т.е. они гарантируют (с логической точки зре- ния), что будут выполнены полностью или не выполнены вовсе, даже если в систе- ме до окончания процесса выполнения транзакции произойдет сбой.

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

Замечание. По сути, благодаря именно этому свойству продолжительности тран- закций данные в базе данных являются постоянными в том смысле, который объ- яснялся в главе 1.

  1. Для транзакций также гарантируется изолированность одной транзакции от другой. Под этим подразумевается, что изменения в базе данных, выполненные некоторой транзакцией 77, не будут видимы для любой транзакции Т2 до тех пор, пока и только пока транзакцией Г/ не будет успешно выполнена операция COMMIT. После выполнения операции COMMIT изменения, которые были .произве- дены некоторой транзакцией, становятся видимыми для других транзакций. О таких изменениях говорят, что они зафиксированы, и гарантируется, что они ни- когда не будут отменены. Если же, напротив, транзакцией была выполнена опе- рация ROLLBACK, все изменения, которые были внесены в базу данных в процессе выполнения этой транзакции, будут отменены (выполнен откат изменений). В последнем случае конечный результат будет таким, как если бы данная транзак- ция вообще не выполнялась.

  2. При параллельном выполнении нескольких транзакций, операции которых череду- ются между собой, обычно гарантируется, что осуществление этих операций будет упорядоченным (serializable). Иначе говоря, результат выполнения каждой из транзакций будет точно таким же, как при строго последовательном выполнении этих же транзакций в некотором произвольном порядке.

Развернутое обсуждение всех остальных аспектов данной темы будет продолжено в главах 14 и 15.

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]