Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metod_ukaz_dlya_lab_rab.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

Создание триггеров

Основной формат команды CREATE TRIGGER:

<Определение_триггера>::=

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

 ON имя_таблицы

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

 [WITH ENCRYPTION]

 AS SQL_операторы 

Или используя предложение IF UPDATE

<Определение_триггера>::=

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

 ON имя_таблицы

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

 [WITH ENCRYPTION]

 AS

 IF UPDATE (имя_столбца)

 [{AND | OR} UPDATE (имя_столбца)...]

SQL_операторы; 

CREATE TRIGGER [имя_триггера] – создается новый триггер с именем имя_триггера

ON имя_таблицы – объявляется таблица или представление, от которых зависит триггер.

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

{ FOR | AFTER | INSTEAD OF} – указывает, когда должен запускаться триггер. Ключевые слова FOR и AFTER являются синонимами. Предложение AFTER показывает, что триггер запускается только после успешного выполнения операции по модификации данных (и других каскадно запускаемых действий и проверок ограничений). Триггер INSTEAD OF может полностью заменить операцию по модификации данных. При этом триггер запускается вместо операции по модификации, которая запустила триггер. Триггер INSTEAD OF DELETE нельзя использовать, если удаление вызывает каскадные действия. Доступ к столбцам TEXT или IMAGE имеют только триггеры INSTEAD OF .

IF UPDATE (имя_столбца) [{AND | OR} UPDATE (имя_ столбца)...] – позволяет выбрать конкретный столбец, запускающий триггер. Триггеры, специфичные для столбца, запускаются только при операциях INSERT или UPDATE, но не DELETE.

Конструкции FOR {INSERT, UPDATE, DELETE} определяют, на какую команду будет реагировать триггер. При его создании должна быть указана хотя бы одна команда. Допускается создание триггера, реагирующего на две или на все три команды.

Неправильно написанные триггеры могут привести к серьезным проблемам, таким, например, как появление «мертвых» блокировок. Триггеры способны длительное время блокировать множество ресурсов, поэтому следует обратить особое внимание на сведение к минимуму конфликтов доступа.

В большинстве СУБД действуют следующие ограничения:

  • Нельзя использовать в теле триггера операции создания объектов базы данных (новой базы данных, новой таблицы, новой хранимой процедуры, нового триггера, новых представлений).

  • Нельзя использовать в триггере команду удаления объектов DROP для всех типов базовых объектов базы данных.

  • Нельзя использовать в теле триггера команды изменения базовых объектов ALTER TABLE, ALTER DATABASE.

  • Нельзя изменять права доступа к объектам базы данных, т.е. выполнять команду GRAND или REVOKE.

  • Нельзя создать триггер для представления (VIEW) .

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

  • Внутри триггера не допускается выполнение восстановления резервной копии БД или журнала транзакций.

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

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