De este entrada de blog
Desencadenadores de MySQL:¿Cómo cancela una INSERCIÓN, ACTUALIZACIÓN o ELIMINACIÓN con un desencadenador? En #mysql de EfNet, alguien preguntó:
¿Cómo hago que un disparador cancele la operación si falla mi regla comercial?
En MySQL 5.0 y 5.1 necesita recurrir a algunos trucos para hacer que un disparador falle y entregue un mensaje de error significativo. Las preguntas frecuentes de MySQL StoredProcedure dicen esto sobre el manejo de errores:
SP 11. ¿Los SP tienen una declaración de "aumento" para "aumentar errores de aplicación"? Lo siento, no en este momento. Las sentencias SQL estándar SIGNAL y RESIGNAL están en TODO.
Tal vez MySQL 5.2 incluirá SIGNALstatement que hará que este hackstolen directamente de MySQL StoredProcedure Programming quede obsoleto. ¿Cuál es el truco? Vas a obligar a MySQL a intentar usar una columna que no existe. ¿Feo? Sí. ¿Funciona? Claro.
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;