Dovendo definire un trigger su mysql contenente un costrutto BEGIN…END si incontra il problema del carattere “;” che non consente di definire correttamente l’intero corpo del trigger.

Se questo è il mio trigger:

CREATE TRIGGER prova
BEFORE INSERT ON account
FOR EACH ROW
BEGIN
IF NEW.ruolo = `admin` THEN
SET NEW.maxTime = 600;
END IF;
END;

Volendolo caricare da riga di comando devo impostare un delimiter differente dal punto e virgola in modo che quest’ultimo non vada in errore, quindi:

mysql> delimiter //
mysql> CREATE TRIGGER pippo
-> BEFORE INSERT ON prova
-> FOR EACH ROW
-> BEGIN
-> IF NEW.ruolo = `admin` THEN
-> SET NEW.pippo = 1000;
-> END IF;
-> END;//
Query OK, 0 rows affected (0.10 sec)

Si noti la presenza del “//” alla fine dell’ultimo END.
A questo punto occorre anche re-impostare il delimiter originale:

delimiter ;