Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Изолированность пользователя




Во многопользовательских системах с одной БД может работать несколько пользователей или прикладных программ. Предельной задачей системы является обеспечение изолированности пользователей, т. е. создание надежной и достоверной иллюзии того, что каждый пользователь работает с БД в одиночку. В связи со свойством сохранения целостности БД, транзакции являются подходящими единицами изолированности пользователей. Если с каждым сеансом работы с БД ассоциируется транзакция, то каждый пользователь начинает работу с согласованным состоянием БД, т. е. таким состоянием, в котором БД могла бы находиться даже, если бы пользователь работал с ней в одиночку. При соблюдении обязательного требования поддержания целостности БД возможны следующие уровни изолированности транзакции:
1) отсутствие потерянных изменений (транзакция 1 изменяет объект БД А. До завершения транзакции 1, транзакция 2 также изменяет объект А. Транзакция 2 завершается оператором Rollback. Тогда при повторном чтении объекта А транзакция 1 не видит изменений этого объекта произведенных ранее. Чтобы избежать такой ситуации в транзакции 1 требуется, чтобы до завершения транзакции 1 никакая другая транзакция не могла изменять объект А. Отсутствие потерянных изменений является минимальным требованием к СУБД по части синхронизации параллельно выполняемых транзакций.);

2) Отсутствие чтения грязных данных (транзакция 1 изменяет объект БД А. Параллельно с этим транзакция 2 читает объект А. Поскольку операция изменения еще не завершена, транзакция 2 видит несогласованные, «грязные» данные. Чтобы избежать такой ситуации: до завершения транзакции 1 никакая другая транзакция не должна читать объект А.);

3) Отсутствие неповторяющихся чтений (транзакция 1 читает объект БД А. До завершения транзакции 1 транзакция 2 изменяет объект А и успешно завершается оператом Commit. Транзакция 1 повторно читает объект А и видит его измененное состояние. Чтобы избежать неповторяющихся чтений до завершения транзакции 1 никакая другая транзакция не должна изменять объект.)

4) Кортежи-фантомы (транзакция 1 выполняет оператор F выборки кортежей отношения R, удовлетворяющих условию до завершения транзакции 1 транзакция 2 вставляет в отношение R новый кортеж, удовлетворяющий условиям и успешно завершается. Транзакция 1 повторно выполянет оператор F и в результате появляется кортеж, который отсутствовал при первом выполнении оператора. Чтобы избежать появления кортежей-фантомов требуется более высокий логический уровень синхронизации транзакций.)

 

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

2) Транзакция 2 пытается изменить объект, прочитанный не закончившейся транзакцией 1.

3) Транзакция 2 пытается читать объект, измененный не закончившейся транзакцией 1. Практические методы сериализации транзакций основываются на учете этих конфликтов. Существуют два базовых подхода к сериализации транзакций:
1) Основанный на синхронизационных захватах объектов БД.
2) Основанный на использовании временных меток.
Суть обоих подходов состоит в обнаружении конфликтов транзакций и их устранении. Наиболее распространенным в централизованных СУБД является подход, основанный на соблюдении двухфазного протокола синхронизационных захватов объектов БД. Суть протокола состоит в том: перед выполнением любой операции транзакция запрашивает синхронизационный захват объекта БД в соответствующем режиме. Выделяют два вида режима:
1) Совместный режим – разделяемый захват объекта для выполнения операции чтения.
2) Монопольный режим – заключается в монопольном захвате объекта и требуемый для выполнения операции вставки, удаления, изменения.

Для обеспечения сериализации транзакции синхронизационные захваты объектов, произведенный по инициативе транзакции, можно снимать только при ее завершении. Это требуется двухфазным протоколом:
1) Накопление захватов.
2) Освобождение захватов.

 

Элементы языка sql

Важнейшая часть любой системы, применяющей БД — языковые средства, обеспечивающие возможность доступа и действий над данными, определение их структур, способов использования и интерпретации. Язык sql появился в 70-е гг., как одно из таких средств. Его прототип был разработан фирмой IBM под названием Sequel — структурный английский язык запросов. Sql вобрал в себя достоинства реляционной модели и в частности достоинства, лежащие в основе математического аппарата реляционной алгебры и реляционного исчисления. Используя при этом сравнительно небольшое число операторов и относительно простой синтаксис. Благодаря своим качествам, sql стал стандартным языком работы с реляционными данными. Этот стандарт поддерживается всеми мировыми фирмами, действующими в сфере технологий БД. Использование эффективного стандартного языка позволило обеспечить высокую степень независимости разрабатываемых прикладных систем от конкретного типа используемой СУБД, а также существенно поднять уровень и унификацию инструментальных средств разработки приложений, работающих с реляционными БД. Язык sql в большинстве его коммерческих реализаций имеют большие или меньшие отличия от стандарта. С одной стороны это уменьшает совместимость систем, использующих различные диалекты sql, с другой стороны полезные расширения реализации языка обеспечивают его развитие и со временем включаются в новые редакции стандарта. В настоящее время ни одна система не реализует стандарт sql в полном объеме. Во всех диалектах языка имеются возможности, не являющиеся стандартными, поэтому каждый диалект — надмножество некоторого подмножества стандарта sql. Sql относится к классу непроцедурных языков программирования, в отличие от универсальных процедурных языков, которые также могут быть использованы для работы с БД, sql ориентирован не на записи, а на множества (отношения). Это значит, что в качестве входной информации для формируемого на языке запроса к БД используется множество кортежей одной или нескольких таблиц отношений. В результате выполнения запроса также формируется множество кортежей результирующего отношения. Запрос sql задает не процедуру, а условие, которым должны удовлетворять кортежи результирующего отношения. Существуют и используются две формы языка sql:
1) интерактивный sql;

2) встроенный sql.

Интерактивный sql используется для создания sql-запросов пользователей и получения результатов в интерактивном режиме. Встроенный sql состоит из команд sql, встроенных внутрь программ, обычно написанных на каком-то другом языке. Это делает программу, использующей такие языки более мощными, гибкими и эффективными, обеспечивая их применение для работы с данными, хранящимися в реляционных БД. При этом требуются дополнительные средства интерфейса sql с языком, в который он встроен. Язык sql подразделяется на две составные части:
1) язык определения данных — дает возможность создания, изменения и удаления различных объектов БД (таблицы, индексы, пользователи).

2) язык манипулирования данных — дает возможность выборки информации из БД и ее преобразование.

Типы данных в sql

В языке sql выделяют средства, позволяющие для каждого атрибута указывать тип данных, которому должны соответствовать все значения этого атрибута. Определения типов данных, является той частью языка, в которой коммерческие реализации языка не полностью совпадают с требованиями официального стандарта. Это объясняется желанием обеспечить совместимость sql с другими языками программирования. Первый тип данных — строка символов. Стандарт поддерживает только один тип представления текста — CHARACTER [(длина)] либо CHAR [(длина)]. Длина — от 1 до 255. Если длина не указана явно, то она равна одному символу. Если вводимая в поле текстовая константа будет меньше заданного числа символов, то константа автоматически дополнится пробелами. VARCHAR[(длина)] — в отличие от CHAR не дополняется пробелами строка, если вводимая строка меньше длины. Числовые типы данных: INTEGER - используется для определения целых чисел в диапазоне от -2^31 до +2^31. SMALLINT — для представления целых чисел от -2^15 до +2^15. DECIMAL (точность[,масштаб]) — десятичное число с фиксированной точкой. Точность определяет количество значащих цифр в числе. Масштаб определяет максимальное число цифр справа от точки. NUMERIC(точность[,масштаб]) — аналогичен. FLOAT[(точность)] — число с плавающей точкой, с указанной минимальной точностью. REAL — число с плавающей точкой, точность определена по умолчанию. DOUBLE PRECISION — число аналогичной REAL, но точность в два раза выше. Дата/время — нестандартный тип данных, но в большинстве поддерживает типы DATE и TIME. Неопределенные и пропущенные данные — для обозначения пропущенных, отсутствующих или неизвестных значений атрибутов в sql используется ключевое слово NULL, это приводит к ряду особенностей, которые необходимо учитывать при работе с новыми значениями. В агрегирующих функциях NULL значения атрибута игнорируется. Условные операторы от булевой двухзначной логики расширяются до 3-ех значной логике (true, false, unknown). Все операторы за исключением оператора конкатенации строк, возвращает null — значение. Для проверки на пустое значение используется оператор is null, is not null. Функция преобразования типа, имеющая null в качестве аргумента. Квадратные скобки означают необязательные параметры синтаксиса; многоточие — выражение предшествующее ему может повторяться любое число раз; фигурные скобки — объединяют последовательность элементов в логическую группу, один из элементов которой должен обязательно использоваться; вертикальная черта — указывает, что часть определения, следующая за этим символом, является одним из возможных вариантов; треугольные скобки — заключаются элементы, объясняемые по мере того, как они вводятся.

Выборка данных с использованием предложения SELECT

Вывести города, где проживают студенты:

SELECT DISTINC город FROM Студенты;

Предложение WHERE определяет, какие строки должны быть выбраны (предикаты). В предложение WHERE могут использоваться операторы сравнения, а также логические операторы.

Выведем всех студентов по фамилии студентов:

SELECT*FROM Студенты WHERE Фамилия=”Петров”;

Учатся на первом курсе и получают стипендию:

AND стипендия IS NOT NULL;

При задании логического условия WHERE могут использоваться IN, LIKE, IS NOT NULL, BETWEEN.

Оператор IN используется для сравнения проверяемого значения с заданным списком. Этот список значений. Этот список указывается справа от оператора IN в круглых скобках. Построенный предикат считается истинным, если значение поля, имя которого указано слева от IN, совпадает с одним из значений, перечисленных в списке. NOT противоположно IN.

Выведем фамилии студентов, которые учатся в университете под кодом: 1, 6, 28, 16:

SELECT фамилии FROM студенты WHERE №_университета IN (1,6,28,16);

Оператор between используется для проверки условия вхождения в заданный интервал, т.е. вместо списка значений этот оператор задает границы его изменения, граничные изменения входят в интервал.

Вывести предметы в промежутке от 30 до 70 часов:

SELECT название FROM предметы WHERE часы BETWEEN(30 AND 70);

Оператор LIKE применим только к символьным значениям. Этот оператор просматривает строковые значения с целью определения, входит ли в заданное в операторе like строка в символьную строку проверяемого поля. Для выборки строковых значений по заданному образцу подстроки можно применять шаблоны искомого образца строки, использую следующие символы:
нижнее подчеркивание - ….., % - допускает присутствия в указанном месте последовательность любых символов произвольной длинны.

Вывести студентов, проживающих в девятом доме:

SELECT фамилия FROM студенты WHERE адрес LIKE ’ %д9’;

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

SELECT ‘фамилия’, Surname, ’Имя’, Name, 100 FROM Student;

Select фамилия, имя, -(стипендия*курс)/2 FROM студенты;

Оператор AS для переименования. Пишется после столбца, который нужно переименовать.


 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...