русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Триггеры


Дата добавления: 2015-07-09; просмотров: 590; Нарушение авторских прав


Триггеры (trigger) – это SQL предложения, которые инициируются при выполнении определенных операций над объектами базы данных. Мы рассмотрим в качестве объектов базы данных – таблицы, а в качестве операций – вставку, удаление и замену строк. Триггеры – это один из механизмов поддержания целостности базы данных.

В простейшем виде спецификация триггера имеет следующий синтаксис:

CREATE TRIGGER trigger_name

FOR { DELETE, INSERT, UPDATE [OF columns_list], }

ON table_name

[WHEN (condition)]

SQL_Statements

Смысл его следующий. При выполнении операции INSERT, UPDATE или DELETE над таблицей table_name и при выполнении условия condition выпол­нить предложения из SQL_Statements. Конструкция FOR…ON называется инициирующим предложением (triggering statement), WHEN – условием инициирования триггера (WHEN clause), а SQL_Statements – действием триггера (trigger body). Рассмотрим несколько примеров.

1) При вставке или обновлении строки в таблице DEPARTMENT установить значение поля Fund в таблице FACULTY равным сумме фондов всех кафедр соответствующего факультета.

CREATE TRIGGER Faculty_Fund_Update

FOR INSERT, UPDATE

ON DEPARTMENT

UPDATE FACULTY

SET Fund = SELECT SUM(Fund)

FROM DEPARTMENT

WHERE DEPARTMENT.#F = DEPARTMENT.NEW.#F

WHERE FACULTY.#F = DEPARTMENT.NEW.#F

Доступ к старым и новым значениям строк. Если производится обновление строк таблицы, то в триггере допус­ка­ет­ся обращение к старым и новым значениям обновляемых строк. Это достигается использованием квалификато­ра NEW/OLD перед именем колонки. Такие квалификаторы допускается использовать как в условии триггера, так и в описании его действия.

2) При удалении информации о кафедре удалить сведения о всех преподавателях кафедры

CREATE TRIGGER Department_Delete

FOR DELETE

ON DEPARTMENT

DELETE FROM TEACHER



WHERE TEACHER.#D = DEPARTMENT.#D

3) При удалении строки о преподавателе установить значение NULL во всех тех столбцах #Curator таблицы GROUP, в которых этот преподаватель был куратором.

CREATE TRIGGER Teacher_Delete

FOR DELETE

ON TEACHER

UPDATE GROUP

SET #Curator = NULL

WHERE GROUP.#T = TEACHER.#T

Триггеры и транзакции. Неявно подразумевается, что действия по выполнению основной операции и выполняе­мые в триггере, составляют единую транзакцию. Это означает выполнение следующих действий:

· Перед выполнением вставки, обновления, удаления неявно инициируется команда BEGIN TRANSACTION.

· Выполняется операция вставки/обновления/удаления.

· Вызывается и выполняется триггер.

· Либо триггер явно производит откат транзакции, либо по умолчанию триггер завершается.

Таким образом, при необходимости триггер может инициировать откат транзакции.

4) Строка о кафедре может быть вставлена только в том случае, когда существует строка о факультете, которому принадлежит кафедра (кафедра без факультета не может существовать в базе данных)

CREATE TRIGGER Department_Insert

ON DEPARTMENT

FOR INSERT

WHEN NOT EXIST ( SELECT * FROM FACULTY WHERE FACULTY.#F = DEPARTMENT.#F )

begin

ROLLBACK TRANSACTION

end

Как видим, в качестве SQL предложений во фразе AS можно использовать команду if. В этом примере проверяет­ся, существует ли факультет с таким номером, который указывается во вставляемой строке кафедры, и если нет, то производится откат транзакции.

Вложенность триггеров. Триггеры могут быть вложенными. Это означает следующее: манипулирование строкой одной таблицы может инициировать триггер, который производит манипулирование строками другой таблицы. В свою очередь, манипулирование строками второй таблицы может инициировать триггер, который произво­дит манипули­ро­ва­ние строками третьей таблицы, и т.д.

Помните, что вложенность триггеров может приводить к их "зацикливанию".

Ограничение на использование триггеров:

· Триггеры не могут определяться к виртуальным таблицам.

· При удалении таблицы, все связанные с ним триггеры также удаляются.

· Триггеры могут определяться только к уже созданным таблицам.



<== предыдущая лекция | следующая лекция ==>
Откат транзакции и точки сохранения | Курсоры


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.453 сек.