d4:c03

Ceci est une ancienne révision du document !


Voir cette page sous forme de diaporama.

D4-C03 : Première approche de la programmation au sein d’un SGBD - La gestion d'événements en SQL

On peut utiliser un langage de programmation associé à un SGBD, la programmation d’événements (events) en est une illustration. Elle permet de planifier dans le temps l'exécution d'un traitement à renouveler éventuellement de façon périodique.

  • revoir la gestion des dates
  • découvrir la gestion d'évènements avec le SGBD MariaDB
  • automatiser des traitements planifiés
  • mettre en oeuvre aves des exercices pratiques

MariaDB propose plusieurs types de données pour gérer les dates et heures : - DATE : date (AAAA-MM-JJ) - DATETIME : date + heure (AAAA-MM-JJ HH:MM:SS) - TIME : durée ou heure du jour - TIMESTAMP : similaire à DATETIME mais dépend du fuseau horaire - YEAR : année sur 4 chiffres

Quelques fonctions utiles :

  • SELECT NOW(); – date et heure actuelles
  • SELECT CURDATE(); – date actuelle
  • SELECT DATE_ADD(NOW(), INTERVAL 100 DAY); – +100 jours
  • SELECT DATE_FORMAT(NOW(), '%W %d %M %Y'); – mise en forme
  • SELECT YEAR(champDate);
  • SELECT MONTH(champDate);

Gestion commerciale

schéma bd

  1. Quels clients ont acheté un produit l'année dernière ?
  2. Quels clients ont acheté un produit depuis moins de 180 jours ?
  3. Quels clients n'ont rien acheté ce mois-ci ?
  4. Trouver tous les achats réalisés au cours des 30 derniers jours.
  5. Calculer combien de jours se sont écoulés depuis la dernière commande de chaque client.

Indépendamment de la base précédente :

  1. Afficher la date du premier jour du mois précédent (Par exemple, si nous sommes le 20 mars 2017, la requête doit afficher 2017-2-01 - cette réponse est éligible à la qualité de réponse parfaite si elle fonctionne même en janvier)
  2. Afficher la date du prochain jeudi (le langage SQL peut utiliser des structures conditionnelles, effectuez des recherches !)
  3. Afficher la date du premier jour du mois précédent.
  4. Afficher la date du prochain lundi.
  5. Écrire une requête qui ajoute 6 mois à la date actuelle.

La programmation d’événements (events) permet de planifier dans le temps l'exécution d'un traitement à renouveler éventuellement de façon périodique. Ils nécessitent que le planificateur d’événements (event_scheduler) soit activé.

Voici quelques exemples de tâches que vous pourrez mettre en œuvre, sans avoir à passer par des artifices de programmation de plus ou moins bonnes qualités. Vous pourrez, par exemple :

  • Programmer des requêtes de suppression pour délester de vieilles discussions sur un forum.
  • Calcul annuel d'intérêt.
  • Programmer des requêtes de sauvegardes automatiques chaque nuit.
  • Différer l'exécution d'un traitement gourmand en ressources aux heures creuses de la prochaine nuit.
  • Analyser et optimiser l'ensemble des tables mises à jour dans la journée
  • Le programmateur d’événements (event scheduler) doit être actif
  • L'utilisateur doit avoir le privilège SUPER (au niveau global) pour avoir l'autorisation d'exécuter des commandes d'administration et de débogage.
  • Pour définir un événement dans une base, l'utilisateur doit avoir le privilège EVENT.

Vérification : SHOW VARIABLES LIKE 'event_scheduler';

Activation : SET GLOBAL event_scheduler = ON;

CREATE EVENT [IF NOT EXISTS] [nom_base].nom_evenement
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE]
    [COMMENT 'commentaire']
    DO instructions_sql;
=====  =====
--Exemple
CREATE EVENT nom_evenement
ON SCHEDULE EVERY 1 DAY STARTS CURRENT_TIMESTAMP
DO
   instruction_sql;

schedule précise la planification (instant initial, période, instant final) selon le modèle suivant :

  • AT timestamp [+ INTERVAL intervalle] 🡪 exécution unique (événement ponctuel)
  • EVERY intervalle 🡪 répéter l'exécution périodiquement (événement périodique)
  • [STARTS timestamp] : début événement
  • [ENDS timestamp] : fin événement
    • timestamp désigne un instant au format TIMESTAMP ou DATETIME(précision à la seconde)
    • intervalle est le délai exprimé sous la forme d'une ou plusieurs expressions séparées par '+' quantite {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
  • ON COMPLETION renseigne sur le fait de supprimer l'événement après son exécution, par défaut NOT PRESERVE, l'événement expiré est détruit.
clause ON SCHEDULE l'événement s'exécute … (à compléter)
1 AT '2019-10-2 10:59:00'
2 AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
3 AT CURRENT_TIMESTAMP + INTERVAL 3 WEEK + INTERVAL 2 DAY
4 EVERY 1 DAY STARTS '2019-10-2 4:00:00'
5 EVERY 3 MONTH STARTS CURRENT_TIMESTAMP + INTERVAL 1 WEEK
6 EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK

A04

  • d4/c03.1758744109.txt.gz
  • Dernière modification : 2025/09/24 22:01
  • de dthevenot