Exécuter plusieurs requêtes SQL avec un événement MySQL

Capture d'écran de phpMyAdmin

On continue avec la gestion des événements de MySQL. Ce coup-ci l’objectif est d’exécuter plusieurs requêtes dans un même événement.

Principe

Dans le cadre de la maintenance courante d’une base de données il est fréquent d’exécuter un ensemble de requêtes s’appliquant à plusieurs tables. Si les opérations sont automatisées via des événements le développeur/administrateur a deux solutions pour la mise en œuvre de ces taches : créer plusieurs événements, chacun n’exécutant qu’une seule requête ; créer un événement exécutant plusieurs requêtes.

Les deux méthodes ont leurs avantages et leurs inconvénients. Dans le cas d’un événement exécutant plusieurs requêtes l’avantage principal sera la création d’une routine claire, avec la maîtrise de l’ordre d’exécution des requêtes.

Code

CREATE DEFINER=user
EVENT `clean_drupal_cache`
ON SCHEDULE EVERY 1 DAY STARTS '2026-03-11 06:34:24'
ON COMPLETION NOT PRESERVE ENABLE
COMMENT 'Vide les tables de cache'
DO

BEGIN

DELETE FROM dru5259_cache_page
WHERE expire <> -1 AND expire < UNIX_TIMESTAMP();

DELETE FROM dru5259_cache_render
WHERE expire <> -1 AND expire < UNIX_TIMESTAMP();

DELETE FROM dru5259_cache_dynamic_page_cache
WHERE expire <> -1 AND expire < UNIX_TIMESTAMP();

DELETE FROM dru5259_cache_data
WHERE expire <> -1 AND expire < UNIX_TIMESTAMP();

END

Le code permet d’effacer tous les enregistrements dans les tables de cache vieux de plus d’un jour. N’oubliez pas d’adapter le « user » en fonction de votre configuration.

Démarche

Dans un premier il faut écrire et tester les requêtes une par une. De préférence avec une base de données de test. J’enfonce une porte ouverte, mais les fondamentaux doivent toujours être rappelés de temps en temps.

Une fois les requêtes fonctionnelles, il faudra les tester en bloc. Si rien ne casse, vous pouvez passez à l’écriture du code pour l’événement.

La première partie du code est triviale. Elle est identique à celle pour un événement n’exécutant qu’une seule requête.

La partie incluant les requêtes commence par BEGIN et finit par END. Entre ces deux mots clés il faudra écrire l’intégralité des requêtes SQL. Il est très important de ne pas oublier de finir les requêtes par un point virgule « ; ». Dans le cas contraire l’événement risque de ne pas s’exécuter du tout.

Concernant l’ordre d’exécution des requêtes, il faut préciser qu’elles seront exécutées séquentiellement. Elles s’exécuteront donc l’une après l’autre, dans l’ordre d’écriture, et seulement une fois que la requête précédente aura été exécutée. Il faut donc correctement définir cet ordre, sous peine de générer des erreurs, pouvant empêcher le bon fonctionnement de votre base de données.

Trucs et astuces

Vous utilisez phpMyAdmin pour créer vos événements ? Vous avez raison. Et vous êtes un battant !

Mais vous rencontrez des erreurs lorsque vous créer ce type d’événements.

Hormis les problèmes liés aux requêtes en elles-mêmes, phpMyAdmin peut afficher un message d’erreur s’il n’y a pas de ligne après BEGIN et avant END. Il faudra donc bien penser à sauter des lignes.

De la même manière n’hésitez pas à sauter des lignes entre chaque requête. Cela rendra votre code plus lisible et plus facile à maintenir.

Commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *