Справочное руководство по Delphi

       

Запуск транзакции


Выполнять транзакции можно, например, из Windows Interactive SQL, из программы, из сохраненной процедуры или триггера. В общем виде, синтаксис команды SQL для запуска транзакции:

SET TRANSACTION [Access mode] [Lock Resolution]

[Isolation Level] [Table Reservation]

Значения, принимаемые по-умолчанию:

выражение

SET TRANSACTION

равносильно выражению

SET TRANSACTION READ WRITE WAIT ISOLATION LEVEL SNAPSHOT

Access Mode - определяет тип доступа к данным. Может принимать два значения:

    •  
    • READ ONLY - указывает, что транзакция может только читать данные и не может модифицировать их.
    •  


    • READ WRITE - указывает, что транзакция может читать и модифицировать данные. Это значение принимается по умолчанию.
    • Пример:

      SET TRANSACTION READ WRITE

      Isolation Level - определяет порядок взаимодействия данной транзакции с другими в данной базе. Может принимать значения:

        •  
        • SNAPSHOT - значение по умолчанию. Внутри транзакции будут доступны данные в том состоянии, в котором они находились на момент начала транзакции. Если по ходу дела в базе данных появились изменения, внесенные другими завершенными транзакциями, то данная транзакция их не увидит. При попытке модифицировать такие записи возникнет сообщение о конфликте.
        •  
        • SNAPSHOT TABLE STABILITY - предоставляет транзакции исключительный доступ к таблицам, которые она использует. Другие транзакции смогут только читать данные из них.
        •  
        • READ COMMITTED - позволяет транзакции видеть текущее состояние базы.
        • Конфликты, связанные с блокировкой записей происходят в двух случаях:

          •  
          • Транзакция пытается модифицировать запись, которая была изменена или удалена уже после ее старта. Транзакция типа READ COMMITTED может вносить изменения в записи, модифицированные другими транзакциями после их завершения.
          •  
          • Транзакция пытается модифицировать таблицу, которая заблокирована другой транзакцией типа SNAPSHOT TABLE STABILITY.
          • Lock Resolution - определяет ход событий при обнаружении конфликта блокировки. Может принимать два значения:




              •  


              • WAIT - значение по умолчанию. Ожидает разблокировки требуемой записи. После этого пытается продолжить работу.


              •  


              • NO WAIT - немедленно возвращает ошибку блокировки записи.


              • Table Reservation - позволяет транзакции получить гарантированный доступ необходимого уровня к указанным таблицам. Существует четыре уровня доступа:





                  •  


                  • PROTECTED READ - запрещает обновление таблицы другими транзакциями, но позволяет им выбирать данные из таблицы.


                  •  


                  • PROTECTED WRITE - запрещает обновление таблицы другими транзакциями, читать данные из таблицы могут только транзакции типа SNAPSHOT или READ COMMITTED.


                  •  


                  • SHARED READ - самый либеральный уровень. Читать могут все, модифицировать - транзакции READ WRITE.


                  •  


                  • SHARED WRITE - транзакции SNAPSHOT или READ COMMITTED READ WRITE могут модифицировать таблицу, остальные - только выбирать данные.









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