Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИПК_Занятия_ОПБД / Lectures_14-15.pptx
Скачиваний:
20
Добавлен:
15.04.2015
Размер:
3.86 Mб
Скачать

Триггеры – полезное, но и «опасное»

средство (неправильная логика работы триггера может «уничтожить» целую БД). Поэтому требуется

тщательно отлаживать триггеры и

проверять логику их работы.

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

объектов. 61

Команды создания триггеров

зависят от типа триггеров (DML, DDL).

Для удаления триггера – команда:

62

В последних версиях СУБД MS SQL Server (начиная с 2005) возможно создание двух типов триггеров:

DML-триггеров («обычных»

триггеров), которые выполняются

при возникновении событий языка

обработки данных (DML),

DDL-триггеров, срабатывающих

при выполнении инструкций языка

определения данных (DDL).

63

DML-триггеры выполняются при

изменении данных в указанной

таблице или представлении с

помощью инструкций INSERT, UPDATE,

DELETE.

DDL-триггеры выполняются при возникновении на сервере таких DDL- событий, как создание, изменение или удаление объекта БД, и используются

для администрирования БД. 64

10.1. DML-триггеры

Для создания DML-триггеров используется оператор CREATE TRIGGER,

упрощенный формат которого имеет вид:

Параметр WITH ENCRYPTION

(с шифрованием) шифрует код триггера после помещения его на сервер.

После ключевого слова FOR

указывается тип DML-триггера:

AFTER - триггер запускается после

выполнения пользователем

изменений данных (тип по умолчанию);

INSTEAD OF – триггер выполняется

вместо команды, приведшей к

запуску триггера.

66

Ключевые слова INSERT (Вставить),

UPDATE (Обновить) и DELETE

(Удалить) определяют операции, которые инициируют выполнение триггера.

При создании DML-триггера должна

быть указана хотя бы одна операция.

Допускается создание триггера, реагирующего на две или на все три операции.

67

В отличие от ХП и функций

DML-триггеры не являются отдельными

объектами, и их нельзя исполнить напрямую.

DML-триггер «привязан» к конкретной таблице (представлению) и

«реагирует» на конкретное событие

(INSERT, UPDATE, DELETE).

При возникновении этого события триггер автоматически запускается. Именно DML-триггеры можно запускать

в двух режимах: AFTER и INSTEAD OF.

68

Триггер AFTER запускается после успешного завершения SQL Server всех

операций.

Например, при вставке строки в таблицу триггер, определенный для операции INSERT, запускается только после того, как строка пройдет все ограничения, заданные: первичными

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

Если любое из этих условий не69проходит

проверку, триггер не запускается.

Триггер INSTEAD OF выполняется вместо операции, вызвавшей запуск

триггера.

Код триггера - любые элементы синтаксиса T-SQL, за исключением:

нельзя создавать, изменять, удалять резервные копии или восстанавливать БД;

в таблице, которая привела к запуску триггера, не допускаются изменения структуры БД с помощью инструкций CREATE / ALTER / DROP INDEX,

ALTER / DROP TABLE и других. 70

Соседние файлы в папке ИПК_Занятия_ОПБД