Создание триггеров в MySQL
Триггеры - это хранимые процедуры, которые выполняются при наступлении определённого события. Под событием подразумевается отправка определённого запроса. Например, при добавлении записи в таблицу триггер может быть вызван и будет выполнен определённый код.
Чтобы проверить, как работают триггеры, давайте создадим с Вами 2 таблицы. Первая таблица - это страны (countries):
- id - уникальный идентификатор.
- title - название страны.
Таблица с городами (cities):
- id - уникальный идентификатор.
- title - название города.
- country_id - id той страны, которой принадлежит данный город.
Теперь давайте сделаем так, что если вдруг удаляется запись из таблицы со странами, то все города, принадлежащие этой стране, удаляются из таблицы с городами.
Такой триггер создаётся в MySQL следующим образом:
DELIMITER //
CREATE TRIGGER `delete_cities` BEFORE DELETE ON `countries`
FOR EACH ROW BEGIN
DELETE FROM `cities` WHERE `country_id`=OLD.`id`;
END
После создания триггера при удалении страны автоматически удалятся из другой таблицы все города, принадлежащие этой стране. Теперь разберём подробнее синтаксис создания триггера:
- DELIMITER - разделитель, который необходимо указать, иначе на ";" будет выдаваться ошибка.
- `delete_cities` - это просто имя триггера.
- BEFORE DELETE - данная команда означает, что триггер будет срабатывать непосредственно перед удалением записи. Вместо BEFORE может быть AFTER, а вместо DELETE другое событие, например, INSERT или UPDATE.
- `countries` - название таблицы, на которую устанавливается триггер.
- FOR EACH ROW - начало команды, выполняемой при срабатывании триггера.
- BEGIN и END - отдельный блок выполняемой команды.
- OLD.`id` - обращение к полю `id` удаляемой записи из таблицы `countries`.
Сразу скажу, что здесь я показал простой пример. В реальности, код после FOR EACH ROW может быть не 2 строчки, а очень и очень большим. Там так же можно писать циклы, условия, различные сравнения и многое-многое другое.
Вот таким образом создаются триггеры в MySQL.
-
- Михаил Русаков
Комментарии (2):
Спасибо, Михаил, всегда приятно узнавать что-нибудь новое.
Ответить
Здравствуйте Михаил Юрьевич! извините, может я невнимателен но есть ли статья про хранимые процедуры и функции вообще… и зачем они нужны? ЗЫ я вот разобрался в конечном счете - но попотеть пришлось :) зато могу сам такую статью написать ;)
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.