- •Лабораторная работа 1
- •Лабораторная работа №2 Создание базы данных
- •Работа в среде Microsoft sql server 2008
- •Создание базы данных
- •Создание таблиц, входящих в бд. Задание для их атрибутов типов данных и ограничений целостности, соответствующих смыслу таблиц.
- •Присвоение имен ограничениям
- •Проверка ограничивающих условий с использованием составных полей
- •Values (111,'Петров','Александр', ‘Иванович’, ‘1994-05-05’, 23, 3,5);
- •Values (101, 'Иванов', null, 200, 3, 'Москва','6/10/1979', 15);
- •3. Модификация структуры таблицы (добавление и удаление нового столбца, добавление ограничений, изменение типа данных, ограничений целостности)
- •Лабораторная работа №3 Команды манипулирования данными
- •Values (111, 'Иванов', ‘Александр’);
- •Лабораторная работа №4 Проектирование запросов
- •Лабораторная работа №5 Создание запросов
- •Проектирование представлений, хранимых процедур, триггеров
- •Проектирование представлений
- •Примеры триггеров
- •Лабораторная работа №7 Представления
- •Обновление данных в представлениях
- •Тип, Цена, Цена*0.05 from Товар Модифицирование представлений
- •Операции модификации в представлениях, маскирующих строки и столбцы
- •Агрегированные представления
- •Представления, основанные на нескольких таблицах
- •Лабораторная работа №8 Разработка хранимых процедур Хранимые процедуры
- •Создание, изменение и удаление хранимых процедур
- •Drop procedure {имя_процедуры} [,...N]; Выполнение хранимой процедуры
- •Лабораторная работа №9 Создание триггеров
- •Компоненты триггера
- •Типы триггеров
- •Создание триггеров
- •Преимущества использования триггеров:
- •Программирование триггеров
- •Примеры использования триггеров
- •Insert into Students (fio, Nomer_zachetki, id_Group, Stipendiya) values ('Ильин с.В.', '08вп131', 2, 1250);
- •17.6. Использование хранимых процедур в триггерах
- •Insert into Students (fio, Nomer_zachetki, id_Group, Stipendiya) values ('Макарь в.А.', '06вп118', 4, 1200);
Создание триггеров
Основной формат команды 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) .
В отличие от хранимых процедур триггер не может возвращать никаких значений, он запускается автоматически сервером и не может связаться самостоятельно ни с одним клиентом.
Внутри триггера не допускается выполнение восстановления резервной копии БД или журнала транзакций.
Выполнение этих команд не разрешено, так как они не могут быть отменены в случае отката транзакции, в которой выполняется триггер.
