Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_dlya_laboratornykh_rabot_BD.doc
Скачиваний:
0
Добавлен:
03.01.2020
Размер:
2.57 Mб
Скачать

2.3 Триггеры

MySQL5 поддерживает следующий синтаксис команды CREATE для создания триггера:

CREATE

[DEFINER = {имя пользователя | CURRENT_USER }]

TRIGGER имя_триггера

время_срабатывания_триггера

событие_вызывающее_триггер

ON имя_таблицы

FOR EACH ROW

тело триггера

При этом параметры этого определения таковы:

время_срабатывания_триггера - задается параметрами BEFORE и AFTER,

(соответственно до и после события);

событие_вызывающее_триггер – может принимать значения INSERT,

UPDATE и DELETE и, соответственно данный триггер будет вызван перед

или после выполнения этих операций;

имя_таблицы – специфицирует таблицу, для которой задан этот триггер;

конструкция FOR EACH ROW означает, что условие срабатывания триггера

проверяется при обработке каждой строки соответствующей таблицы (по

умолчанию ….).

тело триггера

BEGIN

/* набор допустимых операторов SQL */

END;

Начиная с версии MySQL 5.1 триггеры могут обращаться к внешним таблицам непосредственно используя их имена, для более ранних версий MySQL триггеры могут взаимодействовать только с таблицей для которой они были вызваны.

Пример: Предположим, что таблица студенты students содержит инициалы студента (первые буква фамилии и имени в отдельном поле), необходимо реализовать триггер, который бы автоматически заносил эти данные в таблицу при добавлении нового студента. Таблица students с учетом добавления поля принимает следующий вид:

CREATE TABLE `students` (

`student_id` int(11) NOT NULL auto_increment,

`group_id` int(11) default NULL,

`FirstName` varchar(20) default NULL,

`LastName` varchar(20) default NULL,

`order_num` int(11) default NULL,

`FIO` varchar(2) default NULL,

PRIMARY KEY (`student_id`),

KEY `students_group_id` (`group_id`),

KEY `group_id` (`group_id`,`FirstName`),

CONSTRAINT `students_fk` FOREIGN KEY (`group_id`) REFERENCES

`groups` (`group_id`) ON DELETE NO ACTION );__

Триггер students_before_ins_tr задается следующим образом:

CREATE TRIGGER `students_before_ins_tr`

BEFORE INSERT ON `students`

FOR EACH ROW

BEGIN

SET NEW.FIO = CONCAT(SUBSTRING(NEW.LastName,1,

1),SUBSTRING(NEW.FirstName,1, 1));

END;

Здесь NEW, как уже было сказано выше идентификатор записи которая вставляется (триггер создан на срабатывание перед вставкой), SUBSTRING – функция, вырезающая из строки подстроку (необходима для получения первого символа), CONCAT – функция конкатенации (сложения подстрок в одну строку).

В EMS Manager для работы с триггерами существует удобный интерфейс (см Рисунок 7.2). Данный интерфейс доступен из подменю Triggers выбранной таблицы. В полях Type и Event можно быстро менять правила по которым вызывается триггер (соответственно время и событие).

Рисунок 7.2 – Утилита EMS SQL Manager Lite for MySQL: интерфейс пользователя в режиме редактирования триггера.

3. Порядок выполнения работы

В соответствии с моделью данных, полученной в ходе выполнения предыдущих лабораторных работ и пользуясь приведенным выше описанием правил разработки ОБЛ необходимо:

(1) создать представление;

(2) создать хранимую процедуру;

(3) создать триггер.

Прим. При этом создаваемые ОБЛ должны существенно отличаться от приведенных в качестве примеров в данном документе и иметь смысл применительно к предметной области, используемой в лабораторной работе.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]