- •Введение. Цели и задачи. Изучение базы и банков данных
- •Реляционные базы данных
- •Реляционная база данных
- •Функции субд. Типовая организация субд
- •Типовая организация субд
- •Базисные средства манипулирования реляционными данными
- •Реляционная алгебра
- •Общая интерпретация реляционных операций
- •Особенности теоретико-множественных операций реляционной алгебры
- •Реляционное исчисление
- •Целостность сущности и ссылок
- •Субд в архитектуре клиент-сервер
- •Сервера баз данных
- •Типичные распределения функций между клиентами и серверами
- •Оптимизация запросов
- •Стадии процесса оптимизации запросов
- •Язык реляционных баз данных sql
- •Типы данных
- •1) Числовые целые типы данных.
- •2) Нецелочисленные типы данных.
- •3) Денежные типы данных.
- •4) Типы данных для хранения информации о времени.
- •5) Бинарные типы данных.
- •6) Символьные типы данных.
- •7) Текстовые типы данных.
- •8) Специальные типы данных.
- •Управляющие конструкции Transact sql
- •If...Else
- •Логические операторы
- •Создание, модификация и удаление таблиц
- •Определение идентификационной колонки (Identity)
- •Создание таблиц средствами transact sql
- •Изменение структуры таблицы при помощи Transact-sql
- •Управление данными
- •Использование insert
- •Извлечение данных
- •Раздел into предназначен для сохранения результата, выполнения запроса в заданной таблице.
- •Изменение данных
- •Хранимые процедуры
- •Создание хранимых процедур
- •1. Определение типа создаваемой хранимой процедуры.
- •2. Определение входных и выходных параметров хранимой процедуры.
- •3. Разработка кода хранимой процедуры.
- •Управление процессом компиляции хранимой процедуры
- •Управление автоматическим выполнением хранимых процедур
- •Модификация хранимой процедуры
- •Удаление хранимых процедур
- •Использование индексов
- •Создание индексов
- •Использование представлений
- •Создание триггеров
- •Использование курсора
- •Управление правами доступа к объектам базы данных
- •Современные направления исследований и разработок
Создание триггеров
Триггер – это специальный тип хранимых процедур, который запускается автоматически при выполнении тех или иных действий с данными таблицы. Каждый триггер привязывается к конкретной таблице. Все производимые триггером модификации данных рассматриваются как одна транзакция, которая откатывается при обнаружении ошибки или нарушении целостности данных, тем самым внесение изменений будет запрещено.
Существует три типа триггеров в зависимости от команд, на которые они реагируют:
Триггеры на вставку. Запускаются при попытке вставки данных с помощью команды Insert.
Триггеры на обновление. Запускаются при попытке изменения данных с помощью команды Update.
Триггеры на удаление. Запускаются при попытке удаления данных с помощью команды Delete.
Для одной таблицы допускается создание нескольких однотипных триггеров. Триггеры могут быть использованы, например, для создания сложных значений по умолчанию, для обеспечения нестандартной ссылочной целостности, поддержание которой обычными средствами Transact SQL невозможно.
Триггеры часто используются для выполнения каскадных изменений в нескольких связанных таблицах. Область применения триггеров не ограничивается строго очерченными рамками. При их создании необходимо руководствоваться требованиями производительности и удобства выполняемых действий. Следует избегать использования триггеров, если те же действия могут быть реализованы с помощью хранимой процедуры или обычных команд Transact SQL. Использование триггеров нежелательно еще и по той причине, что они удерживают блокировку до завершения триггера, запрещая обращение к ресурсу других пользователей. Для создания триггера используется следующая команда Transact SQL:
CREATE TRIGGER trigger_name
ON TABLE
[WITH ENCRYPTION]
{FOR {[DELETE] [,] [INSERT] [,] [UPDATE]}
[WITH APPEND]
[NOT FOR REPLICATION]
AS
sql_statement [...n]
}
Второй вариант данной команды:
CREATE TRIGGER trigger_name
ON TABLE
[WITH ENCRYPTION]
{FOR { [[INSERT] [,] [UPDATE]}
[WITH APPEND]
[NOT FOR REPLICATION]
AS
{ IF UPDATE (column)
[ { AND/OR }
UPDATE(column) ]
[..n]
}
sql_statement [...n]
}}
Рассмотрим работу первого варианта работы команды Create trigger.
Trigger_name – задает имя триггера, с помощью которого он будет распознаваться хранимыми процедурами и командами Transact SQL. Имя триггера должно быть уникальным в пределах БД.
TABLE – имя таблицы БД, к которой будет привязан триггер.
WITH ENCRYPTION – при указании этой опции сервер выполняет шифрование кода триггера.
[DELETE] [,] [INSERT] [,] [UPDATE] – эта конструкция определяет, на какие автоматы будет реагировать триггер. При создании триггера должно быть указано хотя бы одно из этих ключевых слов, допускается создание триггера, реагирующего на две или три команды.
WITH APPEND – указание этого ключевого слова требуется для обеспечения совместимости с более ранними версиями SQL-сервер.
NOT FOR REPLICATION – запрещает запуск триггера при модификации таблиц с помощью репликации.
sql_statement – определяет набор команд, которые будут выполняться при запуске триггера.
Рассмотрим использование второго способа:
FOR { [[INSERT] [,] [UPDATE] – эта инструкция определяет, при выполнении какой команды будет запускаться триггер.
IF UPDATE (column) – использование этого параметра позволяет выполнить триггер при модификации конкретной колонки таблицы.
AND/OR UPDATE(column) – применение совпадает с предыдущим параметром, если необходимо выполнить запуск триггера при модификации нескольких колонок. Аргумент column задает имя колонки, при модификации которой будет производиться запуск триггера. Ключевое слово AND предписывает запускать триггер только в том случае, если были модифицированы обе колонки, указанные в этой и в предыдущей конструкции. При использовании ключевого слова OR триггер будет выполнен при выполнении изменений в любой из колонок. Допускается использование нескольких конструкций AND/OR UPDATE(column).
Для изменения триггера используется команда ALTER TRIGGER:
ALTER TRIGGER trigger_name
ON TABLE
[WITH ENCRYPTION]
{FOR {[DELETE] [,] [INSERT] [,] [UPDATE]}
[WITH APPEND]
[NOT FOR REPLICATION]
AS
sql_statement [...n]
}
Перед тем как выполнить команду ALTER TRIGGER следует убедиться в существовании в таблице table триггера.
Для удаления триггера используется команда DROP TRIGGER:
DROP TRIGGER {trigger} [..n]
Единственный аргумент trigger обозначает имя триггера. С помощью одной команды DROP TRIGGER можно удалить несколько триггеров.