Da questo post del blog
Trigger MySQL:come si interrompe un INSERT, UPDATE o DELETE con atrigger? Su #mysql di EfNet qualcuno ha chiesto:
Come faccio a fare in modo che un trigger interrompa l'operazione se la mia regola aziendale non riesce?
In MySQL 5.0 e 5.1 è necessario ricorrere ad alcuni trucchi per far fallire il trigger e fornire un messaggio di errore significativo. Le FAQ di MySQL StoredProcedure dicono questo sulla gestione degli errori:
SP 11. Gli SP hanno un'istruzione "raise" per "sollevare errori di applicazione"? Mi dispiace, non al momento. Le istruzioni SQL standard SIGNAL e RESIGNAL si trovano in TODO.
Forse MySQL 5.2 includerà SIGNALstatement che renderà obsoleto questo hack rubato direttamente da MySQL StoredProcedure Programming. Qual è l'hack? Forzerai MySQL a tentare di utilizzare una colonna che non esiste. Brutto? Sì. Funziona? Certo.
CREATE TRIGGER mytabletriggerexample
BEFORE INSERT
FOR EACH ROW BEGIN
IF(NEW.important_value) < (fancy * dancy * calculation) THEN
DECLARE dummy INT;
SELECT Your meaningful error message goes here INTO dummy
FROM mytable
WHERE mytable.id=new.id
END IF; END;