Справочник от Автор24
Найди эксперта для помощи в учебе
Найти эксперта
+2

Триггеры в mysql

Определение 1

Триггер – это хранимая процедура, которая начинает работать при наступлении определенного события.

Пример 1

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

Процедура привязана к базе данных, а триггер привязан к таблице и вызывается по событию только этой таблицы.

Пример 2

Например, запишем инструкции, которые создают таблицу и вызывают триггер при INSERT. Триггер суммирует значения, которые вставлены в столбец «amount» в переменную @sum:

Триггеры в mysql. Автор24 — интернет-биржа заказчиков и авторов

CREATE TRIGGER

Инструкция создания нового триггера:

Триггеры в mysql. Автор24 — интернет-биржа заказчиков и авторов

DEFINER аналогичный процедурному.

trigger_name – название триггера строкового типа.

trigger_time – время действия. Это может быть BEFORE или AFTER, указывающие, что триггер активизируется перед или после указанного события.

trigger_event – вид инструкции, активизирующей триггер. Может принимать следующие значения:

  • UPDATE – каждый раз, когда происходит изменение строки. К примеру, через инструкцию UPDATE.
  • INSERT – каждый раз, когда в таблицу добавляется новая строка. К примеру, через команды REPLACE, LOAD DATA или INSERT.
  • DELETE – каждый раз, когда происходит удаление строки из таблицы. К примеру, через инструкции REPLACE и DELETE. Обратим внимание, что инструкциями TRUNCATE и DROP TABLE относительно таблицы НЕ активизируется триггер, т.к. они не используют DELETE.
«Триггеры в mysql» 👇
Помощь эксперта по теме работы
Найти эксперта
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти

Невозможно существование двух триггеров с теми же временем действия и событием для данной таблицы.

Пример 3

Например, невозможно иметь 2 триггера BEFORE INSERT для таблицы. Но возможно иметь BEFORE INSERT и BEFORE UPDATE или AFTER INSERT и BEFORE INSERT.

tbl_name – название таблицы, к которой триггер привязан.

trigger_stmt – инструкция, которая будет выполняться при активации триггера.

Псевдонимы OLD и NEW

С помощью псевдонимов обращаются к данным в разном состоянии.

OLD.colname позволяет обращаться к столбцу существующей строки до ее модификации или удаления.

NEW.colname позволяет обращаться к столбцу новой строки, которая вставится, или же к существующей строке после ее модификации.

Пример 4

Например:

Триггеры в mysql. Автор24 — интернет-биржа заказчиков и авторов

Перед вставкой строки в test1 вставляются новые данные в test2, удаляются из test3 и обновляются в test4.

Существуют ограничения, которые применяются к инструкциям:

  • Триггер не может воспользоваться инструкцией CALL для вызова хранимых процедур, возвращающих данные пользователю или применяющих динамический SQL. Данные триггеру процедурам можно возвратить через параметры INOUT или OUT.
  • Триггеру нельзя использовать инструкции, неявно или явно начинающие или заканчивающие транзакцию, например, ROLLBACK, COMMIT или START TRANSACTION.

Обрабатываются ошибки в MySQL при выполнении триггеров следующим образом:

  • При возникновении проблем с триггером BEFORE операции на соответствующей строке не выполняются.
  • Триггер BEFORE активизируется попыткой вставки или изменения строки, независимо от удачной или неудачной попытки.
  • Триггер AFTER выполняется только тогда, когда совместно успешно выполняются триггер BEFORE и операция со строкой.
  • Ошибка в триггере AFTER или BEFORE вызывает сбой всей инструкции, вызвавшей триггер.
  • Сбой инструкции вызывает возврат всех изменений для транзакционных таблиц, которые выполнялись инструкцией. Сбой триггера также вызывает возврат всех изменений, т.к. является причиной сбоя команды в целом. Такой возврат изменений не может быть выполнен для нетранзакционных таблиц, т.е. при операторном сбое любые изменения, которые выполнены до ошибки, остаются без изменений.

DROP TRIGGER

Удаление ранее созданного триггера:

Триггеры в mysql. Автор24 — интернет-биржа заказчиков и авторов

Если имя базы данных не задано, удаляется триггер из базы данных, заданной по умолчанию.

ALTER TRIGGER

Переопределение старого триггера:

Триггеры в mysql. Автор24 — интернет-биржа заказчиков и авторов

Дата написания статьи: 04.09.2016
Найди решение своей задачи среди 1 000 000 ответов
Крупнейшая русскоязычная библиотека студенческих решенных задач
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot