Академический Документы
Профессиональный Документы
Культура Документы
Использование
триггеров
Три́ггер (англ. trigger) — хранимая процедура особого типа, которую пользователь
не вызывает непосредственно, а исполнение которой обусловлено действием по
или AFTER (после события). В случае, если триггер вызывается до события, он может
внести изменения в модифицируемую событием запись (конечно, при условии, что
событие — не удаление записи). Некоторые СУБД накладывают ограничения
на операторы, которые могут быть использованы в триггере (например, может быть
запрещено вносить изменения в таблицу, на которой «висит» триггер, и т. п.).
случае ключевые слова BEFORE и AFTER влияют лишь на последовательность вызова
триггеров, так как собственно событие (удаление, вставка или обновление) не происходит.
Пример:
1
BEGIN
insert into info values ('table "district" has changed');
END;
Пример:
Добавление
2
При добавлении данных (при выполнении команды INSERT) в триггере мы можем
получить добавленные данные из виртуальной таблицы INSERTED.
Определим триггер, который будет срабатывать после добавления:
1 USE productsdb
2 GO
3 CREATE TRIGGER Products_INSERT
4 ON Products
5 AFTER INSERT
6 AS
7 INSERT INTO History (ProductId, Operation)
8 SELECT Id, 'Добавлен товар ' + ProductName + ' фирма ' + Manufacturer
9 FROM INSERTED
Этот триггер будет добавлять в таблицу History данные о добавлении товара, которые
берутся из виртуальной таблицы INSERTED.
Выполним добавление данных в Products и получим данные из таблицы History:
1 USE productsdb;
2 INSERT INTO Products (ProductName, Manufacturer, ProductCount, Price)
3 VALUES('iPhone X', 'Apple', 2, 79900)
4
5 SELECT * FROM History
Удаление данных
1 USE productsdb
2 GO
3 CREATE TRIGGER Products_DELETE
4 ON Products
3
5 AFTER DELETE
6 AS
7 INSERT INTO History (ProductId, Operation)
8 SELECT Id, 'Удален товар ' + ProductName + ' фирма ' + Manufacturer
9 FROM DELETED
1 USE productsdb;
2 DELETE FROM Products
3 WHERE Id=2
4
5 SELECT * FROM History
Изменение данных
Триггер обновления данных срабатывает при выполнении операции UPDATE. И в таком
триггере мы можем использовать две виртуальных таблицы. Таблица INSERTED хранит
значения строк после обновления, а таблица DELETED хранит те же строки, но до
обновления.
4
Создадим триггер обновления:
1 USE productsdb
2 GO
3 CREATE TRIGGER Products_UPDATE
4 ON Products
5 AFTER UPDATE
6 AS
7 INSERT INTO History (ProductId, Operation)
8 SELECT Id, 'Обновлен товар ' + ProductName + ' фирма ' + Manufacturer
9 FROM INSERTED
Задание:
Написать триггеры (before, after, instead of DML) для любой таблицы в базе данных и
проверить эффекты работы