Триггеры в mySQL 5.0

Ссылка на статью.
Для чего они нужны:
— чтобы проверить и предотвратить вставку некорректных данных
— чтобы изменить или отменить процедуры INSERT, UPDATE, DELETE
— чтобы отслеживать изменения данных внутри сесии.
Триггер — это фактически хранимая процедура, выполняющаяся при определённом событии, относящемся к определённым данным (хотя и с некоторыми нюансами).
Синтаксис:

CREATE TRIGGER <trigger name>
{ BEFORE | AFTER }
{ INSERT | UPDATE | DELETE }
ON <table name>
FOR EACH ROW
<triggered SQL statement>

При этом доступны специфичные пространства имён OLD и NEW в зависимости от контекста (INSERT, UPDATE, DELETE)

CREATE TRIGGER t21_au
BEFORE UPDATE ON t22
FOR EACH ROW
BEGIN
SET @old = OLD . s1;
SET @new = NEW.s1;
END;//

Пример использования для предотвращения вставки некорректных данных

CREATE TABLE t25
(s1 INT, s2 CHAR(5),
PRIMARY KEY (s1))
ENGINE=INNODB//
CREATE TRIGGER t25_bi
BEFORE INSERT ON t25
FOR EACH ROW
IF LEFT(NEW.s2,1)<>'A' THEN SET NEW.s1=0; END IF;//
CREATE TRIGGER t25_bu
BEFORE UPDATE ON t25
FOR EACH ROW
IF LEFT(NEW.s2,1)<>'A' THEN SET NEW.s1=0; END IF;//

INSERT INTO t25 VALUES (0,'a') /* priming the pump */ //
INSERT INTO t25 VALUES (5,'b') /* gets error '23000' */ //

LEAVE A COMMENT