EVENT é uma nova funcionalidade muito interessante e útil, presente a partir do MySQL 5.1.6. Com os EVENTS você pode por exemplo agendar tarefas para serem executadas toda quarta-feira às 14:00hs, ou também um EVENT único, que será executado somente um vez.

Os EVENTS são utilizados para qualquer tipo de tarefa que envolva, agendamento e diversas operações no banco de dados.

A primeira coisa a fazer para poder utilizar EVENTS, é checar se o seu event_scheduler está habilitado. Para isso rode o seguinte comando:


SHOW PROCESSLIST;

Este comando irá mostrar todos os processos que estão rodando no MySQL. Verifique se existe o processo event_scheduler rodando. Caso não esteja, é necessário habilitá-lo com o seguinte comando:

Obs: Lembrando que como qualquer variável global é necessário ter super privilégios para habilitá-la ou desabilitá-la.


SET GLOBAL event_scheduler = 1;

Após habilitá-lo, execute novamenete:


SHOW PROCESSLIST;

E veja se agora o event_scheduler está habilitado.

A sintaxe de criação de EVENT é muito simples.

CREATE EVENT [ IF NOT EXISTS ] event_name
ON SCHEDULE schedule
[ ON COMPLETION [ NOT ] PRESERVE ]
[ ENABLED | DISABLED ]
[ COMMENT 'comment' ]
DO sql_statement;

Agora vamos começar criando um simples EVENT que á cada segundo irá inserir um novo registro do tipo TIMESTAMP na tabela test.test_event.

Primeiro vamos criar a tabela.

USE test;

CREATE TABLE test.test_event
(agora TIMESTAMP);

Agora vamos ao EVENT.

CREATE EVENT addTime
ON SCHEDULE EVERY 1 SECOND
DO
INSERT INTO test.test_event VALUES(NOW());

Após 5 segundos execute um SELECT:


SELECT * FROM test_event;

Para remover um EVENT utilize o comando DROP:


DROP EVENT addTime;

Neste exemplo vimos que o EVENT continuaria rodando até que fosse desabilitádo o event_scheduler ou fosse utilizado o comando DROP EVENT. Porém, podemos agendar também o horário de início e o horário de término do EVENT.

Vamos apenas modificar o nosso EVENT.

Obs: É importante que você tenha excluído o EVENT através do comando DROP.

CREATE EVENT addTime
ON SCHEDULE EVERY 1 SECOND
STARTS CURRENT_TIMESTAMP + INTERVAL 30 SECOND
ENDS CURRENT_TIMESTAMP + INTERVAL 35 SECOND
ON COMPLETION NOT PRESERVE
DO
INSERT INTO test.test_event VALUES(NOW());

Esse EVENT irá começar 30 segundos após ser criado, e a cada segundo irá adicionar um registro na tabela até que seja tingido o tempo de término, que é exatamente 5 segundos após começar a ser executado. Ao término ele será automaticamente excluído.

Se você quiser ver os EVENTS que estão armazenados no banco, basta utilizar o comando:


SHOW EVENTS;

Esse comando irá retornar todos os EVENTS que já foram criado. Todos os EVENTS criado vão para a tabela mysql.event, logo você também pode utilizar o SELECT.


SELECT * FROM mysql.event;

É isso aí!