Panoramica sugli Eventi
Contents
Gli Eventi sono oggetti dei database con nome, contenenti istruzioni SQL che devono essere eseguite ad un momento programmato, una sola volta o a intervalli regolari.
Funzionano in maniera molto simile al Task Scheduler di Windows o ai Cron Job di Unix.
Per creare, modificare o eliminare gli eventi occorre il privilegio EVENT.
Creare gli Eventi
Gli eventi si creano con l'istruzione CREATE EVENT.
Esempio
MariaDB [test]> CREATE EVENT test_event ON SCHEDULE EVERY 1 MINUTE DO UPDATE test.t1 SET a = a + 1;
Eseguire gli Eventi
Gli Eventi vengono eseguiti solo se l'Event Scheduler è attivo. Esso dipende dalla variabile di sistema event_scheduler, che deve essere impostata a On
se si desidera eseguire gli eventi.
E' possibile controllare se l'Event Scheduler è attivo in questo modo:
MariaDB [test]> SHOW PROCESSLIST; +----+-----------------+-----------+------+---------+------+-----------------------------+------------------+----------+ | Id | User | Host | db | Command | Time | State | Info | Progress | +----+-----------------+-----------+------+---------+------+-----------------------------+------------------+----------+ | 40 | root | localhost | test | Sleep | 4687 | | NULL | 0.000 | | 41 | root | localhost | test | Query | 0 | init | SHOW PROCESSLIST | 0.000 | | 42 | event_scheduler | localhost | NULL | Daemon | 30 | Waiting for next activation | NULL | 0.000 | +----+-----------------+-----------+------+---------+------+-----------------------------+------------------+----------+
Se l'Event Scheduler non è in funzione e event_scheduler
è impostata a OFF
, si può usare:
SET GLOBAL event_scheduler = ON;
per attivarla. Se event_scheduler
è impostata a Disabled
, non è possibile modificarne il valore a runtime. Per modificare il valore della variabile event_scheduler
occorre il privilegio SUPER.
Visualizzare gli Eventi correnti
Si può ottenere un elenco degli Eventi correnti con l'istruzione SHOW EVENTS. Questa mostra solo il nome degli Eventi e l'intervatto - i dettagli completi, compreso l'SQL, possono essere visualizzati con SHOW CREATE EVENT.
Esempio
MariaDB [test]> SHOW EVENTS\G; *************************** 1. row *************************** Db: test Name: test_event Definer: root@localhost Time zone: SYSTEM Type: RECURRING Execute at: NULL Interval value: 1 Interval field: MINUTE Starts: 2013-05-20 13:46:56 Ends: NULL Status: ENABLED Originator: 1 character_set_client: utf8 collation_connection: utf8_general_ci Database Collation: latin1_swedish_ci
MariaDB [test]> SHOW CREATE EVENT test_event\G *************************** 1. row *************************** Event: test_event sql_mode: time_zone: SYSTEM Create Event: CREATE DEFINER=`root`@`localhost` EVENT `test_event` ON SCHEDULE EVERY 1 MINUTE STARTS '2013-05-20 13:46:56' ON COMPLETION NOT PRESERVE ENABLE DO UPDATE test.t1 SET a = a + 1 character_set_client: utf8 collation_connection: utf8_general_ci Database Collation: latin1_swedish_ci
Modificare gli Eventi
Gli Eventi possono essere modificati con l'istruzione ALTER EVENT.
Esempio
ALTER EVENT test_event ON SCHEDULE EVERY '2:3' DAY_HOUR;
Eliminare gli Eventi
Gli Eventi possono essere eliminati con l'istruzione DROP EVENT. Inoltre gli Eventi vengono eliminati automaticamente quando vengono eseguiti per l'ultima volta.
Esempio
MariaDB [test]> DROP EVENT test_event; Query OK, 0 rows affected (0.00 sec)