Транзакция начинается каждый всякий раз, когда происходит сеанс работы с SQL. Все команды, которые вводятся будут частью этой транзакции, пока она не завершится вводом команды COOMMIT WORKили командыROLLBACK WORK. COMMIT делает все изменения, произведенные транзакцией, постоянными, а ROLLBACK может их отменить. Новая транзакция начинается после каждой команды COMMIT или ROLLBACK. Синтаксис данных команд:
Чтобы оставить все изменения постоянными используют команду
COMMIT WORK;
Чтобы отменить изменения используют команду
ROLLBACK WORK;
Так же можно установить автоматическое запоминание выполненных команд, причем если определенные действия приведут к ошибке, то они будут автоматически отменены. Автоматического режима устанавливается командой
SET AUTOCOMMIT ON;
Отмена автоматического режима
SET AUTOCOMMIT OFF;
При режиме AUTOCOMMITкаждая команда становится отдельной транзакцией.
В стандарте ANSI/ISO определена модель трансакций таким образом, что указаны задачи операторов COMMITи ROLLBACK. Согласно стандарту считается, что транзакция автоматически начинается с выполнения пользователем или программой первого оператора SQL. Далее происходит последовательное выполнение остальных операторов SQL до тех пор, пока транзакция не завершится одним из четырех способов:
§ Команда COMMITзавершает выполнение ткущей транзакции, причем изменения, внесенные в БД, становятся постоянными. Новая транзакция начинается непосредственно после COMMIT;
§ Команда ROLLBACKотменяет выполнение текущейтранзакции,сделанные изменения отменяются,а новая транзакция начинается непосредственно послеROLLBACK;
§ Успешное завершение программы обработки данных считается успешным окончанием транзакции, как если бы была выполнена команда COMMIT. Новая транзакция не начинается, т.к. программа закончилась;
§ Неуспешное завершение программы считается неуспешным окончанием транзакции, как ели бы была выполнена команда ROLLBACK. Новая транзакция не начинается, поскольку программа закончилась.
В СУБД SQL Server используется несколько расширенная модель транзакций, представляющая пользователям дополнительные возможности. При этом используются команды:
§ BEGIN TRANSACTION – сообщает системе о начале транзакции. В отличие от стандартной модели, начало транзакции задается явно с помощью этой команды.
§ COMMIT TRANSACTION – сообщает системе об успешном окончании транзакции. После выполнения этой команды все изменения, сделанные в БД в течении транзакции, становятся постоянными. Однако новая транзакция не начинается;
§ SAVE TRANSACTION – создает внутри транзакции точку сохранения. СУБД сохраняет состояние БД в текущей точке и присваивает сохраненному состоянию имя точки сохранения, которое указывается в операторе;
§ ROLLBACK TO SAVEPOINT – отменяет изменения, сделанные в БД после точки сохранения, возвращая транзакцию к месту, где был выполнен оператор SAVE TRANSACTION;
§ ROLLBACK – отменяет все изменения, созданные в БД после оператораBEGIN TRANSACTION.
Все транзакции сохраняются в журнале транзакций, при необходимости системный администратор имеет возможность восстановить данные по этому журналу. Недостатком использования журнала транзакции является увеличение продолжительности выполнения изменений в БД.