Главная страница
Навигация по странице:

  • Модель ANSI / ISO

  • СВОЙСТВА Атомарность

  • Согласованность

  • Изолированность

  • 32 Триггеры. Основные сведения.

  • 33 Создание триггера. Триггер удаления.

  • DELETE

  • 1. Базы данных основные понятия. Введение в базы данных. Определения. 3


    Скачать 273.58 Kb.
    Название1. Базы данных основные понятия. Введение в базы данных. Определения. 3
    Дата21.12.2022
    Размер273.58 Kb.
    Формат файлаdocx
    Имя файлаBSBD.docx
    ТипДокументы
    #856064
    страница11 из 13
    1   ...   5   6   7   8   9   10   11   12   13

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


    С управлением транзакциями в многопользовательской СУБД связаны важные понятия сериализации транзакций и сериального плана выполнения смеси транзакций.

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

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

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

    Модель ANSI/ISO. В стандарте ANSI/ISO SQL определены модель транзакций и функции операторов COMMIT и ROLLBACK. Стандарт определяет, что транзакция начинается с первого SQL-оператора, инициируемого пользователем или содержащегося в программе, изменяющего текущее состояние базы данных. Все последующие SQL-операторы составляют тело транзакции. Транзакция завершается одним из четырех возможных путей:

    1. Оператор COMMIT означает успешное завершение транзакции; его использование делает постоянными изменения, внесенные в базу данных в рамках текущей транзакции;

    2. Оператор ROLLBACK прерывает транзакцию, отменяя изменения, сделанные в базе данных в рамках этой транзакции; новая транзакция начинается непосредственно после использования ROLLBACK ;

    3. Успешное завершение программы, в которой была инициирована текущая транзакция, означает успешное завершение транзакции (как будто был использован оператор COMMIT);

    4. Ошибочное завершение программы прерывает транзакцию (как будто был использован оператор ROLLBACK ).

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

    СВОЙСТВА

    Атомарность. Атомарность гарантирует, что никакая транзакция не будет зафиксирована в системе частично. Будут либо выполнены все её подоперации, либо не выполнено ни одной.

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

    Изолированность. Во время выполнения транзакции параллельные транзакции не должны оказывать влияние на её результат.

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

    32 Триггеры. Основные сведения.


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

    Наиболее общее применение триггера — поддержка целостности в базах данных.

    SQL Server позволяет создавать три типа триггеров:

    - DML-триггеры, которые выполняются при возникновении событий языка обработки данных (DML),

    - DDL-триггеры, срабатывающие при выполнении инструкций языка определения данных (DDL)

    - триггеры входа, срабатывающие в ответ на событие LOGON, возникающее при установке пользовательских сеансов.

    DML-триггеры выполняются при изменении данных в указанной таблице или представлении посредством инструкций INSERT, UPDATE или DELETE.

    DDL-триггеры выполняются при возникновении на сервере таких DDL-событий, как создание, изменение или удаление объекта (CREATE, ALTER, DROP), используются для администрирования базы данных, например для аудита и управления доступом к объектам.

    33 Создание триггера. Триггер удаления.


    Создание триггера похоже на объявление хранимой процедуры и имеет следующий синтаксис:

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

    ON таблица

    [WITH ENCRYPTION]

    {

    {FOR | AFTER | INSTEAD OF} {[DELETE] [,] [INSERT] [,] [UPDATE]}

    [WITH APPEND]

    [NOT FOR REPLICATION]

    AS

    {IF UPDATE (столбец_i)

    [{AND | OR} UPDATE (столбец_j)]

    [… n]

    | IF (COLUMNS_UPDATED() {побитовый_оператор} битовая_маска)

    {оператор_сравнения} битовая_маска_столбца [… n]

    }

    инструкции_SQL [… n]

    }

    }

    WITH ENCRYPTION — эта опция дает разработчикам возможность запретить пользователям читать текст триггера после его загрузки на сервер.

    FOR DELETE, INSERT, UPDATE — ключевые слова, определяющие операцию модификации таблицы, при выполнении которой будет активизирован триггер;

    NOT FOR REPLICATION — показывает, что триггер не активизируется при модификации таблицы в процессе репликации;

    AS — ключевое слово, задающее начало определения триггера;

    инструкции_SQL — в T-SQL триггер может содержать любое количество инструкций SQL, если они заключены в операторные скобки BEGIN ... END;

    IF UPDATE (столбец) — для операций добавления и обновления данных можно определить дополнительные условия на конкретный столбец таблицы; при указании нескольких столбцов они разделяются логическими операторами;

    IF (COLUMNS_UPDATED()…) — выше было показано, как можно с помощью конструкции IF UPDATE (столбец) определять, какие столбцы затрагиваются изменениями. Если необходимо проверять, изменяется ли какой-то один конкретный столбец, эта конструкция очень удобна. Однако при построении сложного условия, включающего много столбцов, данная конструкция получается слишком громоздкой. Для таких случаев предназначена конструкция IF (COLUMNS_UPDATED()…). Результатом функции COLUMNS_UPDATED() является набор битов, каждый из которых отвечает за один столбец таблицы; младший бит соответствует первому стобцу, старший — последнему. Если в операции, вызвавшей срабатывание триггера, была попытка изменить некоторый столбец, то соответствующий бит будет установлен в 1;

    побитовый_оператор — побитовый оператор, определяющий операцию выделения нужных битов, полученных с помощью COLUMNS_UPDATED().

    битовая_маска — в сочетании с побитовым оператором битовая маска позволяет выделить интересующие разработчика биты, то есть определить, изенялись ли в операции, вызвавшей срабатывание триггера, интересующие его столбцы;

    оператор_сравнения и битовая_маска_столбца — функция COLUMNS_UPDATED() дает набор битов, соответствующий изменяемым столбцам. С помощью битовой маски и побитового оператора над этим набором битов производится преобразование и получается некий промежуточный результат. С помощью оператора сравнения этот промежуточный результат сравнивается с битовой маской столбца. Если результат сравнения — истина, то набор инструкций SQL, составляющий тело триггера, будет выполнен, иначе — нет.

    В момент удаления записи (команда DELETE) срабатывает триггер удаления.

    В момент срабатывания триггера удаления создается таблица deleted, куда помещаются удаленные записи, эти записи больше не существуют в базе данных и находятся в кэше. Значит этой таблицей можно воспользоваться.
    1   ...   5   6   7   8   9   10   11   12   13


    написать администратору сайта