Обработка транзакций в sql
Часто единственная, с точки зрения пользователя, операция может потребовать нескольких операций над базой данных. Более того, между этими операциями может даже нарушаться непротиворечивость базы данных, когда противоречивость исчезает только после выполнения всех обновлений. Такое обновление можно считать логической единицей работы.
Транзакция, или логическая единица работы, – это в общем случае последовательность ряда таких операций, которые преобразуют некоторое непротиворечивое состояние базы данных в другое непротиворечивое состояние, но не гарантируют сохранения непротиворечивости во все промежуточные моменты времени.
Никто, кроме пользователя, генерирующего ту или иную последовательность SQL-предложений, не может знать о том, когда может возникнуть противоречивое состояние базы данных и после выполнения каких SQL-предложений оно исчезнет, т.е. база данных вновь станет актуальной. Поэтому в большинстве СУБД создается механизм обработки транзакций, при инициировании которого все изменения данных будут рассматриваться как предварительные до тех пор, пока пользователь (реже система) не выдаст предложения:
COMMIT (фиксировать), превращающее все предварительные обновления в окончательные (“зафиксированные”);
ROLLBACK (откат), аннулирующее все предварительные обновления.
Таким образом, транзакцией можно назвать последовательность SQL-предложений, расположенных между “точками синхронизации”, учреждаемых в начале выполнения программы и издании COMMIT или ROLLBACK и только в этих случаях. При этом следует иметь в виду, что возможен неявный COMMIT (существует режим AUTOCOMMIT, в котором система издает COMMIT после выполнения каждого SQL-предложения) и ROLLBACK (выполняемый при аварийном завершении программы).
Таким образом, пользователь должен сам решать, включать ли механизм обработки транзакций, и если включать, то где издавать COMMIT (ROLLBACK), т.е. какие последовательности SQL-предложений являются транзакциями.
При параллельном использовании базы данных множеством разнообразных пользователей также возникают проблемы. Большинство СУБД позволяют любому числу транзакций одновременно осуществлять доступ к одной и той же базе данных, и в них существуют те или иные механизмы управления параллельными процессами, предотвращающие нежелательные воздействия одних транзакций на другие. По сути, это механизм блокирования, главная идея которого достаточно проста. Если транзакции нужны гарантии, что некоторый объект (база данных, таблица, строка или поле), в котором она заинтересована, не будет изменен каким-либо непредсказуемым образом в течение требуемого промежутка времени, она устанавливает блокировку этого объекта. Результат блокировки заключается в том, чтобы изолировать этот объект от других транзакций и, в частности, предотвратить его изменение средствами этих транзакций. Для первой транзакции, таким образом, имеется возможность выполнять предусмотренную в ней обработку, располагая определенными знаниями о том, что объект в запросе будет оставаться в стабильном состоянии до тех пор, пока данная транзакция этого пожелает.
Язык QBE
3.1.Средства генерации запросов MS Access
Язык QBE использует визуальный подход для организации доступа к информации в базе данных, построенный на применении шаблонов запросов, предложенных в 1977 г. Работа в QBE – задание образцов значений в шаблоне запроса, предусматривающем тот тип доступа к базе данных, который требуется в данный момент, например, получение ответа на некоторый вопрос.
Язык QBE был разработан компанией IBM в 1970-е годы. Он предназначался для пользователей, заинтересованных в выборке информации из баз данных. Этот язык получил у пользователей столь широкое признание, что в настоящее время в той или иной мере он реализован практически во всех популярных СУБД, включая и Microsoft Access. Средства поддержки языка QBE в СУБД Microsoft Access весьма просты в эксплуатации и в то же время доставляют пользователям достаточно широкий спектр возможностей работы с данными.
Средства языка QBE могут быть использованы для ввода запросов к информации, сохраняемой в одной или более таблицах, а также для определения набора полей, которые должны присутствовать в результирующей таблице. Отбор записей может проводиться по конкретному или общему критерию и предусматривать выполнение необходимых вычислений на основе сохраняемой в таблицах информации. Кроме того, средства языка QBE можно использовать для выполнения различных операций с таблицами, например, для вставки и удаления записей, модификации значений полей или создания новых полей и таблиц. Продемонстрируем эти возможности.
При создании или открытии базы данных в среде СУБД Microsoft Access в окне Database отображаются все объекты этой базы данных – таблицы, формы, запросы и отчеты. Так, при открытии базы данных пользователя DreamHome в этом окне будет представлен набор таблиц, входящих в упомянутую базу данных, как показано на рисунке 1.
Запрос к содержащейся в базе данных информации необходимо сконструировать таким образом, чтобы указать СУБД, какие именно данные нас интересуют. Чаще всего используется тип запросов, который принято называть запросами на выборку. Запросы на выборку позволяют просматривать, анализировать или вносить изменения в данные, сохраняемые в одной или нескольких таблицах.
При выполнении запроса на выборку СУБД Microsoft Access помещает выбранные данные в динамический набор данных. Динамический набор представляет собой динамически создаваемое представление (вид), содержащее данные, извлекаемые из одной или более таблиц. Данные выбираются и сортируются в соответствии с указанными в запросе требованиями. Другими словами, динамический набор – обновляемый набор записей, определённый таблицей или запросом, который можно рассматривать как отдельный объект.
Рис. 1. Окно Database СУБД Microsoft Access с объектами базы данных
Помимо запросов на выборку, в среде СУБД Microsoft Access может быть создано и множество других полезных типов запросов. В таблице 1 приведен краткий обзор различных типов запросов, поддерживаемых СУБД Access. Все эти варианты запросов подробно обсуждаются ниже.
Рис.2. Новый запрос СУБД Access
В начале процедуры создания нового запроса СУБД Microsoft Access выводит диалоговое окно New Query, показанное на рисунке 2. Представленный в этом окне перечень доступных вариантов дальнейших действий позволяет либо приступить к созданию нового запроса с нуля и выполнить все требуемые действия собственными силами (вариант Design View), либо воспользоваться для создания запроса помощью одного из мастеров СУБД Access, названия которых составляют оставшуюся часть списка.
Мастера представляют собой один из вариантов вспомогательных программ базы данных. Они задают пользователю ряд вопросов о создаваемом запросе, после чего генерируют его текст на основании полученных ответов. Как видно из рис. 2, можно воспользоваться соответствующим мастером для создания простого запроса на выборку, перекрестного запроса и запросов на поиск дубликатов или записей, не имеющих соответствия в некоторой таблице. К сожалению, этим список доступных мастеров исчерпывается, поэтому создание более сложных запросов на выборку или других типов запросов (параметрических, активных или с автоподстановкой) придется делать самостоятельно.