Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
экз_бд.docx
Скачиваний:
9
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆
  1. Транзакции. Свойства транзакции.

По-простому:

Транза́кция (англ. transaction) — группа последовательных операций с базой данных, которая представляет собой логическую единицу работы с данными. Транзакция может быть выполнена либо целиком и успешно, либо не выполнена вообще.

По-правильному:

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

Свойства:

  • Atomic - атомарность. Транзакция это неделимая единица, которая должна быть либо выполнена, либо отменена.

  • Coordination - согласованность. Смысл транзакции состоит в том, чтобы база данных переходила из одного согласованного состояния в другое.

  • Insulativity - изолированность. Каждая транзакция, которая выполняется, не зависит от остальных. Все результаты одного процесса, доступные в промежутках, не должны быть видны другим транзакциям.

  • Duration - надежность. Все результаты, которые были достигнуты в ходе успешной транзакции, наверняка сохраняются в базе данных.

  1. Поддержка транзакций в sql.

Под транзакцией понимается некоторая группа DML команд. Все изменения сделанные ими, сохраняются в отдельной области памяти до окончательного подтверждения изменений (успешное завершение транзакции), либо до их отмены. Если во время транзакции делается запрос на выборку данных, то создается отдельное представление

Команды управления транзакцией(лекции):

START TRANSACTION /* отмечает начало транзакции */

......

Тело транзакции

…….

SAVEPOINT /* отмечает промежуточную точку сохранения*/

......

Тело транзакции

…….

Обработка ошибки

ROLLBACK /* откатывает все изменения текущей транзакции */

......

Тело транзакции

…….

COMMIT /* сохраняет все изменения текущей транзакции */

Еще бывают:

  • RELEASE SAVEPOINT - уничтожить точку отката, что позволяет освободить часть ресурсов до завершения транзакции;

  • SET TRANSACTION - устанавливает характеристики текущей транзакции. Если транзакция не начата явно, то эта команда игнорируется в PostgreSQL.

Пример:

BEGIN

...

SAVEPOINT pt1; -- сохранили точку отката

...

EXCEPTION

WHEN VALUE_ERROR THEN -- неправильное значение

-- SAVEPOINT можно опустить

ROLLBACK TO SAVEPOINT pt1;

WHEN OTHERS THEN -- другие исключения

...

END;

  1. Механизмы транзакций. Снапшот.

Транзакции обеспечивают целостность БД при возникновении ошибок и многопользовательском доступе.

SNAPSHOT - Моментальный снимок данных. Это средний уровень изолированности. Он позволяет транзакции видеть только те данные, которые существовали в момент старта транзакции. Если другие заинтересованные транзакции изменили запись и подтвердили изменения, то SNAPSHOT - транзакция все равно не увидит этих изменений. Однако она не блокирует данные, с которыми работает.

SNAPSHOT TABLE STABILITY - еще более закрытый уровень изоляции. Транзакции такого уровня не только делают снимок данных, они также блокируют на запись те данные, с которыми работают. Пока такая транзакция не подтверждена, остальные транзакции гарантированно не смогут изменить эти данные. Кроме того, транзакция SNAPSHOT TABLE STABILITY просто не сможет получить доступ к таблице, если в настоящий момент другая транзакция изменяет в ней данные.