Qu'est-ce que sont les déclencheurs ?

MySQL offre 6 sortes de déclencheurs obéissant aux 2 jeux de critères ci-après :

  • Selon la nature de la manipulation [INSERT | UPDATE | DELETE ]
  • Avant ou après la manipulation de table [BEFORE | AFTER]

Exemple de déclencheur

CREATE TRIGGER Usa_BIRBEFORE INSERT ON Usages FOR EACH ROWBEGIN -- Contrôle du ou des types de données des colonnes autres que PK et FK IF NOT NEW.code IS NULL THEN CALL check_normalizedstring(NEW.code, 'Usages.code , Les caractères de contrôle ne sont pas autorisés pour une donnée de type: word', 45002); END IF; IF NOT NEW.code IS NULL THEN CALL check_token(NEW.code, 'Usages.code , Deux espaces contigus ou plus ne sont pas autorisés pour une donnée de type: word', 45003); END IF; IF NOT NEW.code IS NULL THEN CALL check_word(NEW.code, 'Usages.code , Les espaces ne sont pas autorisés pour une donnée de type: word', 45004); END IF; IF NOT NEW.libelle IS NULL THEN CALL check_normalizedstring(NEW.libelle, 'Usages.libelle , Les caractères de contrôle ne sont pas autorisés pour une donnée de type: token', 45002); END IF; IF NOT NEW.libelle IS NULL THEN CALL check_token(NEW.libelle, 'Usages.libelle , Deux espaces contigus ou plus ne sont pas autorisés pour une donnée de type: token', 45003); END IF; -- Calcul de la ou des valeurs de colonnes d’ordonnancement BEGIN DECLARE lastcolOrder INTEGER ; IF NEW.ordre IS NULL THEN SELECT MAX(ordre) INTO lastcolOrder FROM Usages; IF lastcolOrder IS NULL THEN SET lastcolOrder = 0; END IF; SET NEW.ordre= lastcolOrder + 1; END IF; END;END

Le déclencheur ci-dessus intercepte l'insertion d'un nouveau tuple dans la table Usages avant son exécution.

Le mot-clé NEW retourne le pseudo-enregistrement à insérer. Les parties du pseudo-enregistrement (colonnes de la table) peuvent être modifiées.

Les procédures stockées appelées par le déclencheur évitent la redondance de code. Par exemple la procédure check_normalizedstring(chaine) envoie une erreur si la chaîne passée en paramètre contient un caractère de contrôle..