A partir deste post do blog
MySQL Triggers:Como você aborta um INSERT, UPDATE ou DELETE com um atrigger? No #mysql da EfNet alguém perguntou:
Como faço um gatilho abortar a operação se minha regra de negócios falhar?
No MySQL 5.0 e 5.1 você precisa recorrer a alguns truques para fazer um gatilho falhar e entregar uma mensagem de erro significativa. O FAQ do MySQL StoredProcedure diz isso sobre tratamento de erros:
SP 11. Os SPs têm uma instrução “raise” para “levantar erros de aplicação”? Desculpe, no momento não. As instruções SIGNAL e RESIGNAL padrão SQL estão no TODO.
Talvez o MySQL 5.2 inclua SIGNALstatement que tornará este hackstolen direto da programação do MySQL StoredProcedure obsoleto. Qual é o hack? Você vai forçar o MySQL a tentar usar uma coluna que não existe. Feio? Sim. Funciona? 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;