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

mai 6, 2009

(<- précédent)

Gérer les évènements

MySQL propose plusieurs méthodes pour visualiser les évènements. La méthode la plus pratique consiste à aller chercher l’information dans la table event de la base de données des méta-données information_schema:

mysql> SELECT * FROM information_schema.EVENTS;
Empty set (0.00 sec)

L’évènement premier_event créé précédemment n’y apparaît pas. C’est tout à fait normal, un événement à exécution unique n’est par défaut pas conservé par MySQL. Modifions notre événement pour qu’il puisse en rester une trace après son exécution:

mysql> CREATE EVENT _event.premier_event_persistant
ON SCHEDULE AT CURRENT_TIMESTAMP
ON COMPLETION PRESERVE
COMMENT ‘Insertion des données dans la table’
DO
INSERT INTO _event.insert_event ( moment, fois, action ) VALUES (now(), 0, ‘Mon premier event persistant’);
mysql> SELECT * FROM information_schema.EVENTS \G
*************************** 1. row ***************************
EVENT_CATALOG: NULL
EVENT_SCHEMA: _event
EVENT_NAME: premier_event_persistant
DEFINER: daz@localhost
TIME_ZONE: SYSTEM
EVENT_BODY: SQL
EVENT_DEFINITION: INSERT INTO _event.insert_event ( moment, fois, action ) VALUES (now(), 0, ‘Mon premier event persistant’)
EVENT_TYPE: ONE TIME
EXECUTE_AT: 2008-05-29 21:10:04
INTERVAL_VALUE: NULL
INTERVAL_FIELD: NULL
SQL_MODE:
STARTS: NULL
ENDS: NULL
STATUS: ENABLED
ON_COMPLETION: PRESERVE
CREATED: 2008-05-29 21:10:04
LAST_ALTERED: 2008-05-29 21:10:04
LAST_EXECUTED: NULL
EVENT_COMMENT: Insertion des données dans la table
ORIGINATOR: 3307
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
DATABASE_COLLATION: latin1_swedish_ci


MySQL propose également deux autres commandes pour avoir des informations sur les évènements:

SHOW EVENTS et SHOW CREATE EVENT:

mysql> SHOW EVENTS IN _event;
*************************** 1. row ***************************
Db: _event
Name: premier_event_persistant
Definer: daz@localhost
Time zone: SYSTEM
Type: ONE TIME
Execute at: 2008-05-29 21:10:04
Interval value: NULL
Interval field: NULL
Starts: NULL
Ends: NULL
Status: ENABLED
Originator: 3307
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: latin1_swedish_ci
mysql> SHOW CREATE EVENT _event.premier_event_persistant;
*************************** 1. row ***************************
Event: premier_event_persistant
sql_mode:
time_zone: SYSTEM
Create Event: CREATE EVENT ‘premier_event_persistant’ ON SCHEDULE AT ‘2008-
05-29 21:10:04′ ON COMPLETION PRESERVE ENABLE COMMENT ‘Insertion des données dans la table DO INSERT INTO _event.insert_event ( moment,
fois, action ) VALUES (now(), 0, ‘Mon premier event persistant’)
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: latin1_swedish_ci


A noter, qu’il est également possible de lire l’information dans la table event de la base de données mysql avec la requête suivante: SELECT * FROM event .

Vous avez aussi la possibilité de modifier la structure d’un événement, le renommer, ou encore changer son code avec la commande: ALTER EVENT

ALTER EVENT
[DEFINER = { user | CURRENT_USER }]
event_name
[ON SCHEDULE schedule]
[RENAME TO new_event_name]
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT ‘comment’]
[DO sql_statement]


On retrouve les clauses de la commande CREATE EVENT, que l’on peut donc modifier aisément avec ALTER EVENT. Le dernier utilisateur qui modifie un événement devient son DEFINER. Par exemple si un évènement à pour DEFINER daz@localhost. Une modification de cet événement, par exemple le désactiver (DISABLE), avec l’utilisateur root@localhost mettra le DEFINER de l’évènement à la valeur root@localhost.

Désactiver un évènement

mysql> ALTER EVENT _event.vue_materialisee DISABLE;


Il est bien entendu possible d’effacer un événement. Ceci se fait avec la commande DROP EVENT.

DROP EVENT [IF EXISTS] nom_évènement


Effacer un évènement

mysql> DROP EVENT _event.vue_materialisee;


(à suivre… event scheduler: Quelques exemples d’évènements)

Comments are closed.