Смотрите здесь Синтаксис Mysql Trigger
mysql> delimiter //
mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON account
-> FOR EACH ROW
-> BEGIN
-> IF NEW.amount < 0 THEN
-> SET NEW.amount = 0;
-> ELSEIF NEW.amount > 100 THEN
-> SET NEW.amount = 100;
-> END IF;
-> END;//
mysql> delimiter;
Может быть проще определить хранимую процедуру отдельно, а затем вызвать ее из триггера с помощью простого оператора CALL
. Это также полезно, если вы хотите вызвать одну и ту же процедуру из нескольких триггеров.
Существуют некоторые ограничения на то, что может появляться в инструкциях, которые триггер выполняет при активации:
Триггер не может использовать оператор CALL
для вызова хранимых процедур, которые возвращают данные клиенту или используют динамический SQL. (Хранимым процедурам разрешено возвращать данные в триггер через параметры OUT
или INOUT
.)
Триггер не может использовать операторы, которые явно или неявно начинают или заканчивают транзакцию, такие как START
TRANSACTION
, COMMIT
или ROLLBACK
.