Материал: Аксенов_методичка

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

4.4. Порядок выполнения

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

2. Оформить отчет.

4.5. Содержание отчета

1. Титульный лист. 2. Цель работы.

3. Индивидуальный вариант задания.

4. Снимок экрана реляционной схемы в Microsoft Access. 5. Листинг скрипта SQL создания представлений, а также запро-

сов на модификацию и удаление. 6. Выводы.

Примечание: листинг скрипта должен быть приведен с использованием моноширинного шрифта для удобочитаемости.

4.6.Контрольные вопросы

1.Объясните синтаксис и семантику оператора SELECT.

2.Что такое представления и зачем они нужны?

3.Объясните синтаксис и семантику оператора UPDATE.

4.Объясните синтаксис и семантику оператора DELETE.

5.Объясните принцип работы запроса X.

21

Лабораторная работа № 5. СОЗДАНИЕ ТРИГГЕРОВ В СУБД SQLITE

Цель работы

Изучение принципов работы триггеров в реляционных СУБД. Приобретение навыков создания триггеров на добавление, изменение и удаление данных для создания пользовательских ограничений целостности данных.

5.1. Теоретические сведения

Триггер – объект базы данных, который представляют собой набор действий, выполняемых автоматически при наступлении определенных условий. Как правило, триггер привязан к конкретной таблице и запускается при выполнении над ней определенной операции (удаление, добавление, изменение строк).

Синтаксис создания триггера:

CREATE TRIGGER имя триггера

[{BEFORE|AFTER}] [{INSERT|UPDATE|DELETE} [OF имя колонки]] ON имя таблицы

[WHEN условие]

BEGIN

действия

END;

В триггерах есть 2 специальные переменные:

OLD – строка, которая только что была удалена из таблицы (доступна в триггерах, отслеживающих удаление и изменение строк).

NEW – строка, которая только что была добавлена в таблицу (доступна в триггерах, отслеживающих добавление и изменение строк).

5.2. Рекомендации по выполнению лабораторной работы

Лабораторную работу рекомендуется выполнять в программе SQLiteSpy, но допустимо использование других клиентов.

Скрипт лабораторной работы представляет собой одиночный текстовый файл, структурированный следующим образом:

– команды удаления триггеров (DROP TRIGGER);

– команды создания триггеров (CREATE TRIGGER);

– команды проверки работы триггеров (должны быть закомментированы).

22

Команда создания триггера должна сопровождаться SQL-ком- ментарием, объясняющим назначение этого триггера.

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

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

5.3. Индивидуальные варианты

Индивидуальные задания можно получить у преподавателя.

5.4. Порядок выполнения

1. Реализовать для базы данных, полученной в ЛР3, триггеры на основании задания, полученного от преподавателя.

2. Оформить отчет.

5.5. Содержание отчета

1. Титульный лист. 2. Цель работы.

3. Индивидуальный вариант задания.

4. Снимок экрана реляционной схемы в Microsoft Access. 5. Листинг скрипта SQL создания триггеров. 6. Примеры срабатывания.

7. Выводы.

Примечание: листинг скрипта должен быть приведен с использованием моноширинного шрифта для удобочитаемости.

5.6.Контрольные вопросы

1.Объясните назначение и принцип работы триггеров.

2.В чем разница между тем или иным видом триггеров?

3.Объясните синтаксис и семантику оператора CREATE TRIGGER.

4.Объясните принцип работы триггера X.

23

Лабораторная работа № 6. УПРАВЛЕНИЕ ТРАНЗАКЦИЯМИ В СУБД MYSQL

Цель работы

Ознакомление с механизмами изоляции транзакций при параллельном выполнении запросов к одним и тем же данным на различных уровнях изоляции с использованием блокировок и многоверсионности. Получение навыков работы с СУБД MySQL.

6.1.Теоретические сведения

6.1.1.Понятие транзакции

Транзакция – группа операторов, осуществляющих действия над данными, которая обладает ACID-свойствами, т.е.

– атомарностью (не может быть выполнена наполовину); – целостностью (переводит данные из одного корректного состо-

яния в другое); – изоляцией (допускает одновременное выполнение других тран-

закций над теми же данными); – долговечностью (гарантирует сохранность результатов в слу-

чае своего успешного выполнения).

Большинство современных реляционных СУБД являются транзакционными (т.н. ACID-совместимыми), и это свойство лежит в основе гарантий, предоставляемых ими в отношении надежности хранения данных, обеспечения параллельного доступа многих пользователей к одним и тем же данным, а также поддержания целостности (т.е. непротиворечивости) данных при выполнении сложных операций над ними.

Свойство изоляции может быть достигнуто несколькими способами, самые распространенные из которых – многоверсионность и использование блокировок.

6.1.2. Многоверсионность (на примере MySQL)

Идея многоверсионности (MVCC, Multi-Versioned Concurrency Control) как метода достижения изоляции основана на том факте, что процесс, выполняющий чтение данных (оператор SELECT) заинтересован не столько в их свежести, сколько в их целостности. Следовательно, можно избавиться от необходимости блокировок на чтение, вместо этого предоставляя читающим транзакциям копию

24

(слепок) последнего, возможно, не самого свежего, но целостного набора запрашиваемых данных.

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

На уровне READ COMMITTED каждый оператор SELECT работает со наиболее свежим на момент его старта целостным слепком набора данных. При этом если какая-то другая транзакция после этого изменяет этот набор данных и фиксируется, следующий оператор SELECT получит его новую версию в качестве целостного слепка.

Следует понимать, что многоверсионность проявляется только при чтении данных (т.е. отсутствуют S-блокировки, не блокируются зависимости W-R и R-W). При этом запись осуществляется непосредственно в БД, а не в слепок, и если возникает зависимость W-W, используются блокировки.

На уровне READ UNCOMMITTED многоверсионность не используется: каждый оператор SELECT читает последнюю (возможно, «грязную») версию данных непосредственно из БД.

Уровень SERIALIZABLE в MySQL эквивалентен уровню REPEATABLE READ с неявным принудительным включением разделяемых блокировок в операторах SELECT.

6.1.3.Принудительное включение блокировок

ВMySQL есть возможность принудительного включения блокировок на чтение. Это достигается конструкцией SELECT … LOCK IN SHARE MODE.

При этом вне зависимости от уровня изоляции, на существующие в таблице строки, удовлетворяющие условию WHERE оператора SELECT текущей транзакции, накладываются разделяемые блокировки, что:

– не позволяет текущей транзакции читать данные, измененные другой транзакцией, которая еще не была зафиксирована («грязное чтение», W-R);

– не позволяет другим транзакциям изменять данные, прочитанные текущей транзакцией (неповторяемое чтение, R-W).

Разница между уровнями изоляции проявляется лишь в способах наложения блокировок. На уровнях READ COMMITTED

25

Источник: https://studfile.net/preview/16531232/