Savepoint (SQL): различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Строка 38: Строка 38:
ROLLBACK TO after_insert;
ROLLBACK TO after_insert;
</source>
</source>

== Литература ==
* {{книга
| автор = Gunderloy, M.; Jorden, J.L.; Tschanz, D.W.
| заглавие = Mastering Microsoft SQL Server 2005
| издательство = Wiley
| год = 2006
| pages = 200-201
| isbn = 9780471792239
| ref = Gunderloy, Jorden, Tschanz
}}
* {{книга
| автор = Darie, C. and Watson, K.
| заглавие = The Programmer's Guide to SQL
| издательство = Apress
| год = 2008
| pages = 271-274
| isbn = 9781430208006
| ref = Darie, Watson
}}
* {{книга
| автор = Alapati, S.
| заглавие = Expert Oracle Database 11g Administration
| издательство = Apress
| год = 2009
| pages = 338-339
| isbn = 9781430210160
| ref = Alapati
}}

Версия от 12:45, 11 июня 2017

Savepoint (от save pointангл.  cохранить точку) - оператор языка SQL, который разделяет транзакцию на логические точки сохранения. В одной транзакции может быть несколько точек сохранения. Главное преимущество состоит в том, что транзакции можно откатывать частично, к точке сохранения, используя инструкцию ROLLBACK. Поддерживаемые платформы:

Синтаксис SQL

SAVEPOINT имя точки сохранения

В текущей транзакции устанавливается точка сохранения с именем имя_точки_сохранения. Некоторые производители позволяют использовать в транзакции точки сохранения с одинаковыми именами, но стандарт ANSI так делать не рекомендует.

Советы и замечания по использованию

Точки сохранения устанавливаются в пределах транзакции, в которой они определены. Имена точек сохранения должны быть уникальными в этих пределах. Используйте инструкции BEGIN и COMMIT осторожно, поскольку, если вы случайно поставите инструкцию BEGIN слишком рано или COMMIT- слишком поздно, это может сильно повлиять на то, как транзакции будут записываться в базу данных. Обязательно выбирайте для точек сохранения понятные имена, поскольку вы будете позже ссылаться на них в своих программах. Повторное использование имени точки сохранения не приведет к ошибке или выводу предупреждения. Дублирование имени приведет к тому, что предыдущая точка сохранения с таким именем окажется неработоспособной. Будьте внимательны при выборе имен для точек сохранения! При запуске транзакции тратятся ресурсы (а именно блокировки), обеспечивающие целостность транзакций. Ваша транзакция должна как можно быстрее завершиться, чтобы блокировки были сняты и другие пользователи могли использовать ресурсы.

Пример

Для выполнения отката к точке сохранения после некоторых произведенных модификаций введите следующие команды:

INSERT INTO sales
VALUES (7896', 'JR3435', 'Oct 28 1997', 25, 'Net 60', 'BU7832');

SAVEPOINT after_insert;

UPDATE sales SET terms='Net 90'
WHERE sales_id='7896';

SAVEPOINT after_update;

DELETE sales;

ROLLBACK TO after_insert;

Литература

  • Gunderloy, M.; Jorden, J.L.; Tschanz, D.W. Mastering Microsoft SQL Server 2005. — Wiley, 2006. — P. 200-201. — ISBN 9780471792239.
  • Darie, C. and Watson, K. The Programmer's Guide to SQL. — Apress, 2008. — P. 271-274. — ISBN 9781430208006.
  • Alapati, S. Expert Oracle Database 11g Administration. — Apress, 2009. — P. 338-339. — ISBN 9781430210160.