De ce article de blog
Déclencheurs MySQL :comment annuler un INSERT, UPDATE ou DELETE avec un déclencheur ? Sur le #mysql d'EfNet, quelqu'un a demandé :
Comment faire en sorte qu'un déclencheur interrompe l'opération si ma règle métier échoue ?
Dans MySQL 5.0 et 5.1, vous devez recourir à certaines ruses pour faire échouer un déclencheur et délivrer un message d'erreur significatif. La FAQ MySQL StoredProcedure dit ceci à propos de la gestion des erreurs :
SP 11. Les SP ont-ils une instruction « raise » pour « signaler les erreurs d'application » ? Désolé, pas pour le moment. Les instructions SQL standard SIGNAL et RESIGNAL sont sur le TODO.
Peut-être que MySQL 5.2 inclura SIGNALstatement qui rendra obsolète ce hackstolen directement à partir de MySQL StoredProcedure Programming. C'est quoi le hack ? Vous allez forcer MySQL à essayer d'utiliser une colonne qui n'existe pas. Laid? Oui. Est-ce que ça marche? Bien sûr.
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;