Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1-30_BD.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
144.3 Кб
Скачать

38. Работа с триггерами.

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

Триггер создается оператором:

CREATE TRIGGER ИмяТриггера FOR ИмяТаблицы

[ ACTIVE | INACTIVE ]

{ BEFORE | AFTER }

{ DELETE | INSERT | UPDATE }

[ POSITION номер ]

AS

[<объявление локальных переменных>]

BEGIN

<оператор>

END

Изменение существующего триггера:

ALTER TRIGGER ИмяТриггера FOR ИмяТаблицы

[ ACTIVE | INACTIVE ]

{ BEFORE | AFTER }

{ DELETE | INSERT | UPDATE }

[ POSITION номер ]

AS <тело триггера>

Удаление триггера:

DROP TRIGGER ИмяТриггера

39. Понятие транзакции. Свойства транзакций.

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

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

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

2. Свойство согласованности гарантирует, что по мере выполнения транзакций данные переходят из одного согласованного состояния в другое — транзакция не разрушает взаимной согласованности данных.

3. Свойство изолированности означает, что конкурирующие за доступ к базе данных транзакции физически обрабатываются последовательно, изолированно друг от друга, но для пользователей это выглядит так, как будто они выполняются параллельно.

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

40. Взаимовлияние транзакций

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

Взаимовлияние транзакций может проявляться в виде:

  • потери изменений;

  • чернового чтения;

  • неповторяемого чтения;

  • фантомов.

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

транзакция 1 – UPDATE СОТРУДНИКИ SET Оклад = 9200

WHERE Номер = 1123

транзакция 2 – UPDATE СОТРУДНИКИ

SET Должность = "старший экономист", ЕТС = 14

WHERE Номер = 1123

Обе транзакции считали одну и ту же запись (1123, "Рудин В.П.", "экономист", 12, 8300) и внесли каждая свои изменения: в бухгалтерии изменили оклад (транзакция 1), в отделе кадров – должность и ставку по ЕТС (транзакция 2). Результаты транзакции 1 будут потеряны (рис. 1).

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

Неповторяемое чтение является противоположностью повторяемого, т.е. транзакция "видит" изменения, внесённые другими (завершёнными!) транзакциями. Фантомы – это особый тип неповторяемого чтения. Возникновение фантомов может происходить в ситуации, когда одна и та же транзакция сначала производит обновление набора данных, а затем считывание этого же набора. Если считывание данных начинается раньше, чем закончится их обновление, то в результате чтения можно получить несогласованный (не обновлённый или частично обновлённый) набор данных.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]