DAM - DAW - MP 0484 Bases de Dades - NF5
Esdeveniments
Un esdeveniment, EVENT, és un objecte de la base de dades que conté codi SQL que s'executa a posteriori una sola vegada o a intervals regulars.
Funcionen de manera molt similar al programador de tasques de Windows o al cron de Linux.
La creació, la modificació o la supressió d'esdeveniments requereix el privilegi EVENT.
Sintaxis del CREATE EVENT
La sintaxis del CREATE EVENT és:
CREATE [OR REPLACE]
[DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
DO sql_statement;
schedule:
AT timestamp [+ INTERVAL interval] ...
| EVERY interval
[STARTS timestamp [+ INTERVAL interval] ...]
[ENDS timestamp [+ INTERVAL interval] ...]
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
Per a poder crear esdeveniments cal tenir el privilegi EVENT.
schedulepermet configurar si s'executa una sola vegada:ATo diverses vegades, cada cert interval de tempsEVERY.
Exemples
DELIMITER //
CREATE EVENT myevent_1
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
UPDATE myschema.mytable SET mycol = mycol + 1;
//
DELIMITER //
CREATE EVENT myevent_2
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY + INTERVAL 3 HOUR
DO
UPDATE myschema.mytable SET mycol = mycol + 1;
//
DELIMITER //
CREATE EVENT myevent_3
ON SCHEDULE EVERY 1 HOUR
STARTS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH + INTERVAL 1 WEEK
DO
UPDATE myschema.mytable SET mycol = mycol + 1;
//
Eliminació d'esdeveniments
Per eliminar un ESDEVENIMENT utilitzarem la comanda DROP EVENT.
DROP EVENT [IF EXISTS] event_name;
Per eliminar un esdeveniment cal el permís EVENT.
Modificació d'events'
Per modificar un ESDEVENIMENT utilitzarem la comanda ALTER EVENT.
ALTER
[DEFINER = { user | CURRENT_USER }]
EVENT event_name
[ON SCHEDULE schedule]
[ON COMPLETION [NOT] PRESERVE]
[RENAME TO new_event_name]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
[DO sql_statement]
La instrucció ALTER EVENT s'utilitza per canviar una o més característiques d'un esdeveniment existent sense necessitat d'eliminar-lo i recrear-lo. La sintaxi de cadascuna de les clàusules DEFINER, ON SCHEDULE, ON COMPLETION, COMMENT, ENABLE / DISABLE i DO és exactament la mateixa que quan s'utilitza amb CREATE EVENT.
Per eliminar un esdeveniment cal el permís EVENT.
Activació al servidor
Per poder crear esdeveniments, cal tenir el servidor configurat de forma que ho permeti, ja que per defecte, no està activat.
Podem activar-ho, si som root, per un moment, fins que aturem i tornem a iniciar el servidor, amb la comanda SET GLOBAL event_scheduler = ON.
Al fitxer my.ini podem configurar-hi el paràmetre
event_scheduler=ON
dins de l'apartat [mysqld]
Diccionari de dades
Per a consultar els esdeveniments al diccionari de dades cal referir-nos a la taula EVENTS.
information_schema.EVENTS
-
Utilitza la comanda
SHOW CREATE EVENT...per veure'n la definició. -
Utilitza la comanda
SHOW EVENTSper veure les característiques dels esdesdeveniments. -
Des de la shell, acaba aquestes instruccions amb
\Gen comptes de;