Le programmateur d’événements ( Event Scheduler ) (part 4/6)

juin 16, 2009

(<- précédent)


Quelques exemples d’évènements

Insertions de données dans une table, toutes les 30 secondes

mysql> SELECT * FROM _event.insert_event ;
mysql> DELIMITER €€
mysql> CREATE EVENT _event.second_event
ON SCHEDULE EVERY 30 SECOND
DO
BEGIN
/*selectionne la val maximale de la colonne fois. Si elle vaut NULL alors retourne la valeur 0 dans la variable @fois*/
SELECT if(max(fois),max(fois)+1,1) INTO @fois FROM _event.insert_event;
/*Insertion des données dans la table*/
INSERT INTO _event.insert_event (moment, fois, action) VALUES (now(), @fois, concat(‘Execution ‘, @fois,  » de l’event »));
END €€
mysql> DELIMITER ;

Créer une vue matérialisée

Le concept de vue matérialisée n’est pas implémenté dans MySQL. Une vue matérialisée est un « snapshot ». Ce type de vue permet de stocker le résultat d’une requête, contrairement aux vues classiques qui elles, ne stockent que la définition de la requête. Les vues matérialisées ne réexecutent donc pas la requête à chaque interrogation. Par contre la gestion de la fraîcheur des données est à la charge de la vue.

mysql> DELIMITER €€
mysql> CREATE EVENT _event.vue_materialisee
ON SCHEDULE EVERY 10 SECOND
STARTS ‘2008-03-11 16:32:34’
ON COMPLETION NOT PRESERVE ENABLE
DO
BEGIN
/*Effacement de la table _event.City_fra */
TRUNCATE TABLE _event.City_fra;
/*Remplassiage de la table _event.City_fra à partir de la table _event.City*/
INSERT INTO _event.City_fra
SELECT * FROM _event.City WHERE CountryCode=’FRA’
ORDER BY name;
END €€
mysql> DELIMITER ;

A noter que les commandes TRUNCATE et INSERT ne sont pas atomiques. Il est donc possible qu’une interrogation sur la table _event.City_fra ne renvoie pas de résultat.

(à suivre… event scheduler: Appel d’une procédure stockée)

Comments are closed.