PROD_ID PROD_DESC COST
11235 КОСТЮМ ВЕДЬМЫ 29.99
222 ПЛАСТИКОВЫЕ ТЫКВЫ 7.75
13 ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ 1.1
90 ФОНАРИ 14.5
15 КОСТЮМЫ В АССОРТИМЕНТЕ 10
9 СЛАДКАЯ КУКУРУЗА 1.35
6 ТЫКВЕННЫЕ КОНФЕТЫ 1.45
87 ПЛАСТИКОВЫЕ ПАУКИ 1.05
119 МАСКИ В АССОРТИМЕНТЕ 4.95
1234 ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ 5.95
2345 ПОЛОЧКА ИЗ ДУБА 59.99
11 строк выбраны. Затем удалим из таблицы все записи для товаров, стоимость которых меньше $14,00.
DELETE FROM PRODUCTSJTMP
WHERE COST < 14;
8 строк удалено.
Для того чтобы передать базе данных изменения, проведенные транзакцией, применяется оператор COMMIT:
COMMIT;
Передача выполнена.
При внесении в базу данных большого количества изменений настоятельно рекомендуется использовать команду COMMIT как можно чаще. Хотя слишком частое применение команды COMMIT приводит к существенному замедлению выполнения запрашиваемых операций. Не забывайте о том, что все изменения сначала размещаются в области, допускающей отмену изменений. Если эта область переполнится и не сможет принять очередную порцию информации о вносимых изменениях, база данных скорее всего совсем перестанет отвечать на запросы, что сделает дальнейшее осуществление транзакций вообще невозможным.
В некоторых реализациях SQL транзакции подтверждаются без явного использования команды COMMIT. В таких реализациях сам выход из базы данных автоматически вызывает подтверждение транзакций.
Команда ROLLBACK
Команда ROLLBACK используется для отмены транзакций, которые еще не были сохранены в базе данных. Команду ROLLBACK можно использовать для отмены только тех транзакций, которые были выполнены после применения последней из команд COMMIT или ROLLBACK.
Синтаксис команды ROLLBACK следующий.
rollback [ work ] ;
Как и в операторе COMMIT, ключевое слово WORK здесь тоже является необязательным.
В следующем примере сначала выберем все записи из таблицы PRODUCTS_TMP, оставшиеся в ней после удаления 8 записей.
SELECT * FROM PRODUCTS_TMP;
PROD_ID PROD_DESC COST
11235 КОСТЮМ ВЕДЬМЫ 29.99
90 ФОНАРИ 14.5
2345 ПОЛОЧКА ИЗ ДУБА 59.99
3 строки выбраны.
Затем изменим таблицу, приписав стоимость $39.99 товару с кодом 11235.
UPDATE PRODUCTS_TMP
SET COST = 39.99 WHERE PROD_ID = "11235';
1 строка обновлена.
Запрос к таблице покажет, что изменения как будто бы внесены. SELECT * FROM PRODUCTS_TMP;
PROD_ID PROD_DESC COST
11235 КОСТЮМ ВЕДЬМЫ 39.99
90 ФОНАРИ 14.5
2345 ПОЛОЧКА ИЗ ДУБА 59.99
3 строки выбраны. Теперь используем команду ROLLBACK, чтобы отменить последние изменения.
ROLLBACK;
Отмена выполнена.
Наконец, проверим, что изменения не были переданы базе данных.
SELECT * FROM PRODUCTS_TMP;
PROD_ID PROD_DESC COST
11235 КОСТЮМ ВЕДЬМЫ 29.99
90 ФОНАРИ 14.5
2345 ПОЛОЧКА ИЗ ДУБА 59.99
3 строки выбраны.
Команда SAVE POINT
Команда SAVEPOINT определяет точку в транзакции, к которой можно будет возвратиться, чтобы не отменять всю транзакцию. Синтаксис команды SAVEPOINT следующий.
SAVEPOINT ИМЯ_ТОЧКИ_ОТКАТА;
Эта команда предназначена только для создания точек отката между операторами транзакций. Для отмены групп транзакций используется команда ROLLBACK. Команда SAVEPOINT позволяет упростить процесс управления транзакциями путем разделения больших групп транзакций на более мелкие и лучше управляемые группы.
Имя точки отката должно быть уникальным внутри соответствующей группы транзакций. Однако имя точки отката может совпадать с именем таблицы или другого объекта. По поводу информации об ограничениях на задаваемые имена обратитесь к документации по используемой вами реализации SQL
Команда ROLLBACK TO SAVEPOINT
Команда возврата к точке отката имеет следующий синтаксис.
ROLLBACK TO ИМЯ_ТОЧКИ_ОТКАТА;
В следующем примере мы сначала удалим оставшиеся три. записи из таблицы, но перед каждым удалением создадим по точке отката, чтобы иметь возможность вернуться к любой из них и вернуть соответствующие данные в их прежнее состояние. SAVEPOINT SPl;
Точка отката создана.
DELETE FROM PRODUCTSJTMP WHERE PROD.ZD - '11235';
1 строка удалена.
SAVEPOINT SP2;
Точка отката создана.
DELETE FROM PRODUCTS_TMP WHERE PROD_ID - '90';
1 строка удалена.
SAVEPOINT SP3;
Точка отката создана.
DELETE FROM PRODUCTSJTMP WHERE PROD_ID - '2345';
1 строка удалена.
Теперь после выполнения всех удалений вы имеете возможность передумать и вернуться, например, к точке отката, которую вы назвали SP2. Поскольку SP2 была создана после выполнения первого удаления, возврат к ней означает отмену двух последних удалений.
ROLLBACK SP2;
Отмена выполнена.
Читать дальше