15.3.4 Операторы SAVEPOINT, ROLLBACK TO SAVEPOINT и RELEASE SAVEPOINT
SAVEPOINT identifier
ROLLBACK [WORK] TO [SAVEPOINT] identifier
RELEASE SAVEPOINT identifier
InnoDB поддерживает SQL-операторы SAVEPOINT, ROLLBACK TO
SAVEPOINT, RELEASE
SAVEPOINT и необязательное ключевое слово WORK для ROLLBACK.
Оператор SAVEPOINT устанавливает сохраненную точку транзакции с именем identifier. Если текущая транзакция уже имеет сохраненную точку с таким же именем, старая точка удаляется, и устанавливается новая.
Оператор ROLLBACK TO
SAVEPOINT откатывает транзакцию до указанной сохраненной точки без её завершения. Изменения, внесённые текущей транзакцией в строки после установки сохранённой точки, отменяются при откатe, но InnoDB не освобождает блокировки строк, которые хранились в памяти после установки сохранённой точки. (Для новой вставленной строки информация о блокировке передаётся идентификатором транзакции, хранящимся в строке; блокировка не хранится отдельно в памяти. В этом случае блокировка строки снимается при отмене.) Сохранённые точки, установленные позже, чем указанная сохранённая точка, удаляются.
Если оператор ROLLBACK TO
SAVEPOINT возвращает следующую ошибку, это означает, что сохранённая точка с указанным именем не существует:
ERROR 1305 (42000): SAVEPOINT identifier does not exist
Оператор RELEASE
SAVEPOINT удаляет указанную сохранённую точку из набора сохранённых точек текущей транзакции. Никаких коммита или отката не происходит. Возникнет ошибка, если сохранённая точка не существует.
Все сохранённые точки текущей транзакции удаляются при выполнении COMMIT или ROLLBACK без указания сохранённой точки.
Новый уровень сохранённых точек создаётся при вызове хранимой функции или активации триггера. Сохранённые точки на предыдущих уровнях становятся недоступными и, следовательно, не конфликтуют с сохранёнными точками на новом уровне. По завершении функции или триггера все созданные им сохранённые точки освобождаются, и восстанавливается предыдущий уровень сохранённых точек.
© 2025 Oracle
Licensed under the GPLv2 License.