Posts tagged Events
MySQL – Event
7EVENT é 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í!