×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

6.1.168. SAVEPOINT

6.1.168. SAVEPOINT

SAVEPOINT — определение новой точки сохранения внутри текущей транзакции

Синтаксис

SAVEPOINT savepoint_name

Описание

SAVEPOINT устанавливает новую точку сохранения в рамках текущей транзакции.

Точка сохранения — это специальная отметка внутри транзакции, которая позволяет откатить все команды, выполненные после её установления, восстанавливая состояние транзакции до того момента, каким оно было на момент создания точки сохранения.

Параметры

savepoint_name

Имя, присваиваемое новой точке сохранения. Если точки сохранения с тем же именем уже существуют, они будут недоступны до тех пор, пока более новые одноименные точки сохранения не будут высвобождены.

Примечания

Используйте ROLLBACK TO для отката к точке сохранения. Используйте RELEASE SAVEPOINT для удаления точки сохранения с сохранением результатов команд, выполненных после её установления.

Точки сохранения могут быть созданы только внутри блока транзакции. В одной транзакции может быть определено несколько точек сохранения.

Примеры

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

BEGIN;
    INSERT INTO table1 VALUES (1);
    SAVEPOINT my_savepoint;
    INSERT INTO table1 VALUES (2);
    ROLLBACK TO SAVEPOINT my_savepoint;
    INSERT INTO table1 VALUES (3);
COMMIT;

В результате выполнения вышеуказанной транзакции будут вставлены значения 1 и 3, но не 2.

Для создания и последующего удаления точки сохранения:

BEGIN;
    INSERT INTO table1 VALUES (3);
    SAVEPOINT my_savepoint;
    INSERT INTO table1 VALUES (4);
    RELEASE SAVEPOINT my_savepoint;
COMMIT;

В результате выполнения вышеуказанной транзакции будут вставлены оба значения: 3 и 4.

Для использования одного имени точки сохранения:

BEGIN;
    INSERT INTO table1 VALUES (1);
    SAVEPOINT my_savepoint;
    INSERT INTO table1 VALUES (2);
    SAVEPOINT my_savepoint;
    INSERT INTO table1 VALUES (3);

    -- откат ко второй точке сохранения
    ROLLBACK TO SAVEPOINT my_savepoint;
    SELECT * FROM table1;               -- показывает строки 1 и 2

    -- высвобождение второй точки сохранения
    RELEASE SAVEPOINT my_savepoint;

    -- откат к первой точке сохранения
    ROLLBACK TO SAVEPOINT my_savepoint;
    SELECT * FROM table1;               -- показывает только строку 1
COMMIT;

Приведенная выше транзакция показывает, что сначала выполняется откат строки 3, а затем — строки 2.

Совместимость

Стандарт SQL требует, чтобы точка сохранения автоматически уничтожалась при создании другой точки сохранения с тем же именем. В Digital Q.DataBase, старая точка сохранения сохраняется, хотя при откате или высвобождении будет использоваться только последняя созданная. (Высвобождение более новой точки сохранения с помощью RELEASE SAVEPOINT приведет к тому, что старая точка снова станет доступной для ROLLBACK TO SAVEPOINT и RELEASE SAVEPOINT.) В остальном SAVEPOINT полностью соответствует стандарту SQL.

Смотрите также

BEGIN, COMMIT, RELEASE SAVEPOINT, ROLLBACK, ROLLBACK TO
Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению