Серверный JavaScript 1.4. Руководство по использованию

       

Использование Методов Управления Транзакциями


Используйте следующие методы объектов database или Connection для явного управления транзакциями:

  • beginTransaction стартует новую транзакцию. Все действия, модифицирующие базу данных, группируются в данную транзакцию, называемую текущей транзакцией.

  • commitTransaction подтверждает текущую транзакцию. Этот метод пытается подтвердить все действия, выполненные после последнего вызова метода beginTransaction.

  • rollbackTransaction откатывает текущую транзакцию. Этот метод отменяет все изменения, сделанные с момента последнего вызова метода beginTransaction.

  • Конечно, если Ваша БД не поддерживает транзакции, Вы не сможете использовать их. Например, БД Informix, созданная с использованием опции NO LOG, не поддерживает транзакции, и Вы получите ошибку при использовании данных методов.

Сервис LiveWire Database Service не поддерживает вложение транзакций. Если Вы вызовете beginTransaction несколько раз до подтверждения или отката первой открытой Вами транзакции, Вы получите ошибку.

Для объекта database максимум области видимости транзакции ограничен текущим клиентским запросом (HTML-страницей) в приложении. Если приложение существует на странице до вызова метода commitTransaction или rollbackTransaction, то транзакция автоматически подтверждается или откатывается на основе установок параметра commitflag, задаваемого при соединении с БД.

Для объектов Connection область видимости транзакции ограничена периодом существования этих объектов. Если Вы освобождаете соединение или закрываете пул соединений до вызова методов commitTransaction или rollbackTransaction, то транзакция автоматически подтверждается или откатывается на основе установок параметра commitflag, задаваемого при соединении с БД методом connect или в конструкторе DbPool.

Если текущая транзакция отсутствует (то есть, если приложение не вызывало beginTransaction), вызовы методов commitTransaction и rollbackTransaction могут привести к ошибке в БД.

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

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

Если Вы разбиваете Ваш процесс на несколько транзакций, убедитесь, что вызов next и ассоциированный вызов updateRow или deleteRow происходят внутри одной транзакции. Если Вы получаете ряд в одной транзакции, завершаете её, а затем пытаетесь обновить или удалить ряд, Вы можете получить ошибку в БД.

Выбор способа обработки транзакции зависит от целей Вашего приложения. Нужно обратиться к документации создателя БД для получения информации о том, как использовать транзакции для данного типа БД.



Содержание раздела