(<- précédent)
Créer un événement
Pour créer notre premier événement, un coup d’oeil dans la documentation de MySQL nous donne les informations suivantes:
CREATE
[DEFINER = { user | CURRENT_USER }]
EVENT
[IF NOT EXISTS]
nom_évènement
ON SCHEDULE moment
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'commentaire']
DO requêtes_sql;
moment:
AT timestamp [+ INTERVAL intervalle] ...
| EVERY interval
[STARTS timestamp [+ INTERVAL intervalle] ...]
[ENDS timestamp [+ INTERVAL intervalle] ...]
Les clauses entre crochets sont optionnelles, pour nous faciliter la tâche, ignorons les pour le moment. Comme tous les objets de la base de données, notre événement a un nom: nom_évènement . Il se lance à un moment: moment, pour exécuter des requêtes: requêtes_sql.
Le lancement de l’évènement est soit ponctuel (AT), soit récurrent (EVERY).
Armé de ces quelques éléments, empressons-nous de créer notre premier événement.
Commençons par créer et nous connecter à la base de données dans laquelle se dérouleront nos tests, la base de données _event, et ensuite créons la table insert_event, qui accueillera les données insérées grâce à notre événement.
mysql> CREATE DATABASE _event;
mysql> USE _event;
mysql> CREATE TABLE _event.insert_event (
moment timestamp,
fois tinyint unsigned,
action char(50)
) ENGINE = MyISAM;
enfin, créons notre événement:
mysql> CREATE EVENT _event.premier_event
ON SCHEDULE AT CURRENT_TIMESTAMP
COMMENT ‘Insertion des données dans la table‘
DO
INSERT INTO _event.insert_event ( moment, fois, action ) VALUES (now(), 0, ‘Mon premier event’);
Quelques explications s’imposent. L’évènement premier_event s’exécute dès sa création, car le moment choisi est CURRENT_TIMESTAMP,de plus il ne s’exécute qu’un fois à cause de la clause AT. Le comportement programmé est ici très simple, il s’agit simplement d’insérer un enregistrement dans la table insert_event. Pour le vérifier il suffit de taper la requête suivante:
mysql> SELECT * FROM insert_event;
+---------------------+------+-------------------+
| moment | fois | action |
+---------------------+------+-------------------+
| 2008-05-29 20:46:25 | 0 | Mon premier event |
+---------------------+------+-------------------+
Notre événement à également laissé des traces dans le fichier de journalisation des erreurs (error log):
080529 20:46:25 [Note] Event Scheduler: scheduler thread started with id 2
080529 20:46:25 [Note] Event Scheduler: Last execution of _event.premier_event. Dropping.
080529 20:46:25 [Note] Event Scheduler: [root@localhost].[_event.premier_event] started in thread 3.
080529 20:46:25 [Note] Event Scheduler: Dropping _event.premier_event
080529 20:46:25 [Note] Event Scheduler: [root@localhost].[_event.premier_event] executed successfully in thread 3.
Ce fichier d’erreurs nous apprend essentiellement deux choses: premièrement que l’évènement s’est déroulé correctement (c’est pour ainsi dire une bonne nouvelle) et deuxièmement que l’évènement à été effacé. En effet, un événement qui ne s’exécute qu’une seule fois n’est par défaut pas préservé (ON COMPLETION NOT PRESERVE) après son exécution.
Pour nous remettre de toutes ces émotions, explicitons les clauses optionnelles de la syntaxe du CREATE EVENT:
DEFINER: le créateur de l’évènement.
IF NOT EXISTS: clause permettant de ne pas générer de messages d’erreurs si un évènement du même nom existe au moment de la création.
ON COMPLETION [NOT] PRESERVE: permet de rendre un événement à exécution unique, persistant dans la table système mysql.event après son exécution.
ENABLE | DISABLE | DISABLE ON SLAVE: active / désactive un événement. Attention un événement désactivé est effacé au redémarrage du serveur MySQL.
COMMENT : Ajouter un commentaire. (ce qui est, du reste, une excellente idée)
(à suivre… event scheduler: Gérer les évènements)
J’aime ça :
J’aime chargement…
Filed under:
MySQL by Olivier DASINI