Dynamic-Mess.com


"The world is a dynamic mess of jiggling things..."

MySQL : procédures automatisées avec les procédures stockées et les triggers

Article posté le 23-01-2015 dans la catégorie SQL

Les procédures stockées et les triggers permettent d'automatiser certaines actions et par là même de de sécuriser et optimiser l'utilisation de votre base de données. Petit tour d'horizon.

1) Les procédures stockées

Les procédures stockées sont une série d'instructions désignées par un nom. En appelant la procédure, les instructions qu'elle comprend seront exécutées.

A la différence des requêtes préparées qui ne sont gardées en mémoire que pour la durée de la session, les procédures stockées sont... stockées dans votre base, et en font donc partie intégrante.

A- Créer une procédure avec MySQL

Tout d'abord, vous devez changer le délimiteur de requêtes, ce caractère qui dit au SGBD quand une requête se termine. Par défaut, il s'agit du caractère ';'. Le problème, c'est que si vous l'utilisez lors de la création d'une procédure, la procédure ne sera pas entièrement lue. Il faut donc remplacer,dans la procédure, le délimiteur par un ou des caractères non utilisés comme '|' ou '//'.

DELIMITER |

Ensuite votre procédure doit englober sa ou ses requêtes entre les mots BEGIN et END.

A présent, nous pouvons créer une procédure :

DELIMITER |
CREATE PROCEDURE afficher_types_utilisateurs()
BEGIN
SELECT Id, Nom, Description
FROM types_utilisateurs;
END|
DELIMITER ;

 

B- Utiliser une procédure

Pour appeler une procédure, rien de plus simple, il faut la précder du mot-clef CALL :

CALL afficher_types_utilisateurs() |

C- Utiliser des paramètres et récuperer des données

Vous pouvez envoyer des paramètres et récupérer des données. Vous avez juste à préciser tout cela dans la fonction avec les mot-clefs IN et OUT et préciser leur type.

Exemple :

DELIMITER |
CREATE PROCEDURE afficher_types_utilisateurs(IN filtre_nom TEXT).
BEGIN
SELECT Id, Nom, Description 
FROM types_utilisateurs
WHERE Nom LIKE '%admin_%' ;
END |
DELIMITER ;

D- Avantages et inconvénients des procédures stockées

Avantages :

Inconvénients :

2) Les triggers

Un trigger (déclencheur) est à l'instar d'une procédure stockée, un élément stocké dans la base de donnée, et en fait partie intégrante. La différence est que le trigger est lui lié qu'à une seule table.

Le trigger définit une ou plusieurs instructions qui sont exécutées avant ou après l'exécution d'une requête spécifique sur la table à laquelle il est lié.

Le trigger est actionné suite à une requête de type

et est parfois utilisé pour remplacer une contrainte de clef étrangère.

Sous MySQL, il existe tellement de possibilités que je ne vais pas les détailler ici, mais juste montrer un exemple d'une création de trigger :

DELIMITER |
CREATE TRIGGER nom_du_trigger BEFORE INSERT
ON ma_table_concernee_par_le_trigger FOR EACH ROW
BEGIN
-- Instructions à exécuter ici
END |
DELIMITER ;

Ici, nous avons crée un trigger qui s'exécutera avant l'insertion d'une ligne dans la table spécifiée. L'exécution concernera chaque ligne insérée/modifiée/supprimée de la table.

Vous avez remarqué le mot BEFORE : c'est ce que l'on appelle le moment d'exécution, l'autre étant AFTER.

Etant donné qu'il n'existe qu'un seul trigger autorisé par combinaison moment/evènement, il ne peut y avoir que maximum 6 triggers par table. Exemple avec UPDATE :

MySQL donne deux mots-clefs bien utiles :

  1. OLD : représente les valeurs de la ligne traitée avant qu'elle ne soit modifiée. OLD n'existe pas dans une insertion.
  2. NEW : représente les valeurs de la ligne traitée après modification. NEW n'existe pas dans une suppression.

A noter que NEW et OLD ne peuvent coexister que dans le cas d'une modification (UPDATE).

 

 


Cet article vous a plu? Découvrez d'autres articles


Tweet
comments powered by Disqus