Базы данных SQL-DDL и SQL-DML. Изучение транзакций. Программирование на языке SQL. Консольное приложение (Цикл лабораторных работ). Вариант № 1, страница 17

2.4.Выводы

В результате работы был изучен SQL-DML и основные возможности IBExpert по написанию запросов и работе с данными. Реализованы индивидуальные SQL-запросы, которые были сохранены в БД в виде представлений, что отразилось на функционале запросов, т.к. в представлениях не используется задание даты и сортировка данных.

Лабораторная 3. Изучение транзакций

3.1. Цели работы

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

3.2. Программа работы

1) Изучить основные принципы работы транзакций.

2) Провести эксперименты по запуску, подтверждению и откату транзакций.

3) Разобраться с уровнями изоляции транзакций в Firebird.

4) Спланировать и провести эксперименты, показывающие основные возможности транзакций с различным уровнем изоляции.

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

3.3. Выполнение работы

Завершенное общение между клиентом и сервером называется транзакцией. Каждая транзакция имеет уникальный контекст, что приводит к тому, что транзакция будет изолирована от всех других транзакций указанным способом. Правила для контекста транзакции задаются в проrрамме клиентскоrо приложения, при передаче параметров транзакции. Транзакция стартует, когда клиент сообщает серверу о ее начале, получая с сервера дескриптор транзакции. Она остается активной, пока клиент не подтвердит работу (если это возможно) или не отменит ее.

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

1) Read Committed.

Чтение подтвержденных изменений. Транзакция может видеть самые последние подтвержденные изменения базы данных, выполненные другими транзакциями. Даже если другая транзакция подтверждает после того, как транзакция, использующая read committed, началась, эти изменения могут быть прочитаны.

Пример:

1-ый запрос:

select * from delays;

;

2-ой запрос:

insert into delays values (2,4,10);

Если не подтвердить 2ой запрос, то результат 1го не изменится. После подтверждения 2го запроса, результат 1го:

2) Snapshot.

Это промежуточный уровень изоляции, также называемый Repeatable Read. Транзакция гарантирует неизменный вид базы данных, который до завершения тpaнзакции не будет зависеть от любых подтвержденных изменений в других транзакциях. Такой уровень полезен для "исторических" задач, таких как формирование отчетов или экспорт данных, которые могут оказаться ошибочными, если не будут выполняться с воспроизводимым видом данных.

Пример 1:

1-ый запрос, Snapshot:

select address.str, people.name from people,address,address_link where address_link.person_id=people.id

and address_link.address_id=address.id

2-ой запрос, Read Committed:

update people set name = 'Петросянко О. Л.' where id = 1

После подтверждения 2й сессии, результат 1й не изменился.

После подтверждения 1й сессии, результат 1й сессии: