Mysql
 sql >> Base de données >  >> RDS >> Mysql

TRIGGERs qui font échouer les INSERTs ? Possible?

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;