- •Предисловие
 - •Анализ предметной области
 - •Анализ требований
 - •Концептуальная модель предметной области
 - •Создание Диаграммы классов вVisio2010
 - •Контрольные вопросы
 - •Проектирование базы данных
 - •Логическая модель базы данных
 - •Создание Логической модели бд вVisio2010
 - •Физическая модель базы данных
 - •Контрольные вопросы
 - •Создание базы данных
 - •Подключение кMssqlServer2012
 - •Создание новой базы данных на сервере
 - •Создание новой таблицы на сервере
 - •Создание связей
 - •Создание диаграммы базы данных
 - •Ограничения целостности базы данных
 - •Сценарий создания базы данных
 - •Контрольные вопросы
 - •Заполнение базы данных
 - •Загрузка информации в базу данных средствамиManagementStudio
 - •Ведение базы данных средствамиSql
 - •Sql-запросы на модификацию данных
 - •Добавление новых записей в таблицу (insert)
 - •Модификация существующих записей (update)
 - •Удаление записей из таблицы (delete)
 - •Контрольные вопросы
 - •Запросы на выборку данных
 - •Общий синтаксис запроса select
 - •Примеры реализации запросов
 - •Контрольные вопросы
 - •Организациябизнес-логики
 - •Хранимые процедуры
 - •Триггеры
 - •Контрольные вопросы
 - •Администрирование сервера бд
 - •Инсталляция сервера
 - •Резервное копирование и восстановление бд
 - •Санкционирование доступа
 - •Приложения приложение а Варианты описания предметной области
 - •Приложение б Состав отчета
 - •Список литературы
 - •Оглавление
 - •153003, Г. Иваново, ул. Рабфаковская, 34.
 
Триггеры
Триггеры, как и хранимые процедуры, являются механизмом организации функционала системы в теле сервера баз данных. В табл.6.1приведено сравнение триггеров и хранимых процедур.
| 
			 Таблица 6.1. Сравнение триггеров и хранимых процедур  | |
| 
			 Хранимые процедуры  | 
			 Триггеры  | 
| 
			 Являются самостоятельным объектом базы данных  | 
			 Привязываются к таблице или виду  | 
| 
			 Явно вызываются на выполнение командой EXECUTE  | 
			 Реагируют на события, связанные с таблицей-владельцем  | 
| 
			 Могут иметь входные и / или выходные параметры, коды возврата  | 
			 Не имеют входных / выходных параметров и кодов возврата  | 
| 
			 Могут выполняться в отдельной транзакции  | 
			 Выполняются в той же транзакции, в которой осуществляются изменения таблицы-владельца  | 
Возможность закрепления триггеров за конкретными операторами определяется тем, что в языке SQLпредусмотрены три типа запросов, предназначенных для изменения данных –INSERT,UPDATEиDELETE. В связи с этим выделяют шесть видов триггеров (табл. 6.2).
| 
			 Таблица 6.2. Виды триггеров  | ||
| 
			 Объект  | 
			 Действие  | 
			 Триггер  | 
| 
			 Таблица / вид  | 
			 Вставка строк INSERT  | 
			 Вместо вставки строк INSTEAD OF  | 
| 
			 После вставки строк FOR (AFTER)  | ||
| 
			 Модификация строк UPDATE  | 
			 Вместо модификации строк INSTEAD OF  | |
| 
			 После модификации строк FOR (AFTER)  | ||
| 
			 Удаление строк DELETE  | 
			 Вместо удаления строк INSTEAD OF  | |
| 
			 После удаления строк FOR (AFTER)  | ||
Примечание: триггеры FOR и AFTER являются синонимами.
Независимо от используемого типа триггера для реализации действий, предусмотренных этим триггером в СУБД SQLServer, используются две виртуальные таблицы.
В одной из них хранятся копии всех вставляемых строк (поэтому данная таблица именуется INSERTED), а во второй хранятся копии всех удаляемых строк (эта таблица именуетсяDELETED) (табл. 6.3).
| 
			 Таблица 6.3. Содержимое таблиц INSERTED и DELETED  | |
| 
			 Вид триггера  | 
			 Таблицы INSERTED и DELETED  | 
| 
			 INSTEAD OF INSERT  | 
			 INSERTED содержит вставляемые в таблицу записи. DELETED пуста  | 
| 
			 FOR INSERT  | 
			 INSERTED содержит вставленные в таблицу записи. DELETED пуста  | 
| 
			 INSTEAD OF UPDATE  | 
			 INSERTED содержит новые значения модифицируемых записей. DELETED содержит старые значения модифицируемых записей  | 
| 
			 FOR UPDATE  | 
			 INSERTED содержит новые значения модифицированных записей. DELETED содержит старые значения модифицированных записей  | 
| 
			 INSTEAD OF DELETE  | 
			 INSERTED пуста. DELETED содержит удаляемые записи  | 
| 
			 FOR DELETE  | 
			 INSERTED пуста. DELETED содержит удаленные записи  | 
На рис. 6.8 приведена схема запуска триггеров FOR(AFTER) иINSTEADOF.

Рис. 6.8. Схема запуска триггеров FOR (AFTER) и INSTEAD OF
Наиболее характерные области применения триггеров – это обеспечение ссылочной и семантической целостности базы данных, создание журналов, поддержка сложных ограничений и проверок, реакция сервера в ответ на действия пользователя.
Создавать новые триггеры можно либо в редакторе запросов среды ManagementStudio, либо воспользовавшись специальным шаблоном (рис. 6.10), который открывается при выборе в «Обозревателе объектов» пункта «Создать триггер» у таблицы, к которой будет привязываться создаваемый триггер (рис. 6.9).

Рис. 6.9. Создание нового триггера

Рис. 6.10. Шаблон создания нового триггера
Общий синтаксиссоздания триггера:
CREATETRIGGER<Имя триггера>
ON<Имя таблицы или вида>
{FOR|AFTER|INSTEAD OF} {[INSERT] [,] [UPDATE] [,] [DELETE]}
AS<SQL-выражения, составляющие тело триггера>
Примеры:
1. Триггер на поддержание актуального количества товаров на складе при добавлении поставок деталей (рис. 6.11).


Рис. 6.11. Текст триггера №1
2. Триггер на поддержание актуального количества товаров на складе при удалении поставок (рис. 6.12).


Рис. 6.12. Текст триггера №2
3. Триггер на поддержание актуального количества товаров на складе при отпуске деталей в цеха (рис. 6.13).

Рис. 6.13. Текст триггера №3
4. Проверка допустимости значения даты поставки при осуществлении новой поставки деталей (рис. 6.14).

Рис. 6.14. Текст триггера №4
5. Проверка допустимости значения даты поставки при редактировании существующей поставки деталей (рис. 6.15).

Рис. 6.15. Текст триггера №5
Задание:создайтедватриггера для своей базы, в отчет поместите их описание и код создания.
