В процессе выполнения транзакции обычно предоставляется возможность проверять успешность ее выполнения путем проверки на наличие ошибок того или иного типа. Тем не менее имеется возможность отменить выполнение всей транзакции даже в результате ее успешного выполнения путем использования команды ROLLBACK, однако она должна быть выполнена до выполнения команды COMMIT. Команда откатывает транзакцию в ее начало, другими словами, база данных возвращается в то состояние, которое она имела до выполнения транзакции. Синтаксис команды следующий:
ROLLBACK [TRANSACTION] [ TO [SAVEPOINT] savepoint
Здесь также можно указать так называемые точки сохранения (контрольные точки), о которых речь пойдет далее. В приводимом примере:
BEGIN TRANSACTION
INSERT INTO FACULTY VALUES (1, "Informatics", "Ivanov", "2/b", 42000)
ROLLBACK TRANSACTION
INSERT INTO FACULTY VALUES (1, "Computer Science", "Petrov", "3/a", 47000)
COMMIT
будет вставлена только вторая строка, так как после вставки первой строки происходит откат транзакции (действие по вставке первой строки аннулируется).
После выполнения предложения COMMIT все действия, имеющиеся в транзакции выполняются. В вязи с этим к данному моменту уже оказывается поздно выполнять откат транзакции.
Откат транзакции приводит к отмене всех действий, выполненных в транзакции к моменту выполнения команды ROLLBACK TRANSACTION. Однако имеется возможность производить откат не всей транзакции, а ее части. Для этого используются так называемые точки сохранения, которые после их определения можно использовать в команде отката транзакции. Синтаксис точек сохранения следующий:
SAVEPOINT savepoint_name
В следующем примере
BEGIN TRANSACTION
UPDATE DEPARTMENT SET Fund = Fund + Fund/10 WHERE Building = "2/3"
SAVEPOINT save_it
DELETE FROM DEPARTMENT WHERE Building = "2/3"
ROLLBACK TO SAVEPOINT save_it
COMMIT
удаление строк не произойдет, так как сразу же после удаления следует откат, к точке сохранения save_it, которая определяется до команды удаления.