MySQL триггер, который срабатывает на INSERT или UPDATE? - PullRequest
0 голосов
/ 28 июля 2011

Есть ли способ создания триггера MySQL, который запускается при UPDATE или INSERT?

Что-то вроде

CREATE TRIGGER t_apps_affected BEFORE INSERT OR UPDATE ...

Очевидно, что вышесказанное не работает. Итак, есть ли обходные пути без создания двух отдельных триггеров? Это нужно мне для обновления счетчика хода на другой таблице.

Ответы [ 2 ]

3 голосов
/ 28 июля 2011

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

CALL update_counter();

и вложите всю свою настоящую работу в процедуру. Тогда триггеры будут простыми

CREATE TRIGGER t_apps_affected BEFORE INSERT ON table
    FOR EACH ROW
BEGIN
CALL update_counter();
END;
3 голосов
/ 28 июля 2011

К сожалению, нет сокращенной формы - вы должны создать несколько триггеров - по одному для каждого события.

документ говорит:

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

INSERT : триггер активируется каждый раз, когда в строку вставляется новая строка стол; например, через INSERT, LOAD DATA и REPLACE заявления.

ОБНОВЛЕНИЕ : Триггер активируется при каждом изменении строки; за Например, с помощью операторов UPDATE.

DELETE : триггер активируется всякий раз, когда строка удаляется из Таблица; например, через операторы DELETE и REPLACE. Тем не мение, Операторы DROP TABLE и TRUNCATE TABLE в таблице не активируются это триггер, потому что они не используют DELETE. Удаление раздела также не активирует триггеры DELETE. См. Раздел 12.1.27, «Синтаксис TRUNCATE TABLE».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...