Salta el contingut

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.

  • schedule permet configurar si s'executa una sola vegada: AT o diverses vegades, cada cert interval de temps EVERY.

Exemples

Exemple amb lo mínim. Programat per: d'aquí una hora.
DELIMITER //
CREATE EVENT myevent_1
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
    DO
      UPDATE myschema.mytable SET mycol = mycol + 1;
//
Programat per: demà a certa hora.
DELIMITER //
CREATE EVENT myevent_2
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY + INTERVAL 3 HOUR
    DO
      UPDATE myschema.mytable SET mycol = mycol + 1;
//
Programat per: a partir d'aquí un mes, cada hora durant una setmana.
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 EVENTS per veure les característiques dels esdesdeveniments.

  • Des de la shell, acaba aquestes instruccions amb \G en comptes de ;