Читаем Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ полностью

Если присутствует предложение FOR UPDATE, буферизованная загрузка будет отключена, а блокировка будет применяться к каждой строке, одна за другой в том порядке, в котором они загружаются из кэша с серверной стороны. Если именованный курсор[108] управляет позицией обновления, это предложение может включать необязательное выражение ON <список-столбцов> для направления изменений указанным столбцам курсора.

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

Пример использования WITH LOCK

Приведенный далее оператор определяет неограниченный по количеству строк выходной набор, где каждая строка будет загружаться в буфер на серверной стороне индивидуально. Следующая строка не будет загружаться до тех пор, пока сервер не сообщит о своей готовности ее принять, WITH LOCK пытается выполнить пессимистическую блокировку при запросе каждой строки. Будет возвращена либо следующая строка, либо исключение.

SELECT + FROM DOCUMENT

WHERE PARENT ID=? FOR UPDATE WITH LOCK

Ограничения явной блокировки

Конструкция SELECT ... WITH LOCK доступна в DSQL и PSQL. Она может использоваться только в операторе SELECT верхнего уровня для единственной таблицы.

* Она недоступна в подзапросе или в соединяемом наборе.

* Она не может быть указана с квантификаторами (оператор DISTINCT, FIRST или SKIP), С предложением GROUP BY, а также с любыми другими агрегатными операциями.

* Она не может быть использована в просмотрах, во внешних таблицах и в выходном наборе хранимой процедуры выбора.

<p>Хранимые процедуры, триггеры и транзакции</p>

Сведения о написании и использовании хранимых процедур и триггеров см. в части VII.

<p>Хранимые процедуры</p>

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

<p>Триггеры</p>

Триггеры вызываются внутри контекста оператора DML. Сделанная работа, включая ту, которая была выполнена в задачах встроенных вызовов процедур, все обновления, добавления или удаления данных других таблиц или за счет внутренней ссылочной целостности или другими триггерами, принадлежащими другим таблицам - все будет подтверждено или возвращено клиенту в неопределенном состоянии. Необработанные исключения в одной операции приведут к отмене операции, при которой встретилась ошибка, и сохранят транзакцию в том состоянии, когда приложение сможет принять решение отменить транзакцию или попытаться исправить ошибку и заново отправить запрос. Отмена транзакции отменит все операции, выполненные в транзакции до момента появления исключения.

<p>"Точки сохранения" в PSQL</p>

Добавление возможностей создания пользовательских точек сохранения в Firebird 1.5 позволяет приложению управлять область действия отката транзакции. В PSQL всегда была возможность обработки исключений. Подробности см. в главе 32.

<p>Советы по оптимизации поведения транзакции</p><p>Выбор подходящей модели транзакции</p>

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

<p>Не переходите к "общему" пока вам это не понадобилось</p>

Общие интерфейсы приложений для баз данных, такие как ODBC или Borland BDE, объединяют одно соединение с базой данных с одной транзакцией. Поскольку их задачей является скрыть разницу между простенькими, основанными на файлах ре- позиториями данных и сложными, использующими транзакции системами управления базами данных, они не поддерживают возможностей наличия множества активных конкурирующих транзакций в сессии базы данных или транзакций, имеющих доступ к нескольким базам данных.

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

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных