Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в СУБД HyTech.doc
Скачиваний:
11
Добавлен:
01.03.2025
Размер:
2.67 Mб
Скачать

Оператор начала транзакции begin work

Оператор begin work используется для того, чтобы начать транзакцию по указанным таблицам. Можно начинать несколько транзакций, если в этих транзакциях задействованы различные таблицы. Каждая транзакция должна производиться по своим таблицам и должна иметь уникальное имя в рамках одного пользователя. Разные пользователи могут начинать транзакции с одинаковыми именами.

Таблицы, участвующие в транзакции, должны быть предварительно открыты (например, операторами open table, create table или операторами select, insert, delete, update).

Формат оператора:

begin work Имя_транзакции       table Таблица1,...;

Аргументы:

Аргумент

Значение

Имя_транзакции

Имя транзакции должно начинаться с буквы или символа «подчеркивания» и может содержать буквы, цифры и символ «подчеркивания». Имя транзакции не должно совпадать с любой другой активной транзакцией данного пользователя. У разных пользователей имена транзакций могут совпадать.

Таблица

Имя таблицы, которая должна быть включена в транзакцию. В списке перечисляются все таблицы, для которых необходимо обеспечить согласованное изменение информации.

После выполнения оператора begin work необходимо проверить код ошибки, т. к. транзакция по ряду причин может не начаться (например, из-за долго занятого ресурса).

begin work m_w1 table BOOK; if (lastsqlerr() !=0) {   quit; }

После начала транзакции начинается отслеживание всех изменений, происходящих в указанных таблицах. Эти изменения «невидимы» для других пользователей, пока не выполнится оператор commit work. Для пользователя эти изменения видны сразу, использовать снимки (оператор fix) в рамках транзакции не надо.

Операторы завершения транзакции

Оператор commit work используется для того, чтобы успешно завершить транзакцию с указанным именем. Все изменения, сделанные в завершаемой транзакции, становятся видны для всех пользователей. После завершения транзакции пользователю рекомендуется обновить снимки (оператор fix table).

Формат:

commit work Имя_транзакции;

Аргументы:

Аргумент

Значение

Имя_транзакции

Имя транзакции, результаты которой надо зафиксировать. Транзакция должна быть явно начата оператором begin work.

Другим оператором для завершения транзакции является оператор rollback work.

Если выполняется оператор rollback work, то все изменения в таблицах, включенных в транзакцию, потеряются (произойдет «откат»). При этом прерывается выполнение транзакции и аннулируются все изменения в данных, которые были произведены в этой транзакции. Все таблицы, которые были задействованы в транзакции (они были перечислены в операторе begin work), возвращаются к тому состоянию, в котором они были на момент начала транзакции.

Если транзакцию пользователя прервали по времени (слишком долгая транзакция или пользователь забыл завершить транзакцию), то перед продолжением работы необходимо выполнить оператор rollback work.

Формат:

rollback work Имя_транзакции;

Аргументы:

Аргумент

Значение

Имя_транзакции

Имя транзакции, результаты которой надо отменить. Транзакция должна быть явно начата оператором begin work.

В механизме транзакций поддерживается откат действий, произведенных операторами insert, delete, update, и не поддерживается откат действий, произведенных операторами create table, create index, drop index и т.д.