MySQL CRIAR EVENTO

Resumo : neste tutorial, você aprenderá como usar a CREATE EVENTinstrução MySQL para criar um evento para automatizar tarefas repetitivas de banco de dados.

Introdução à instrução MySQL CREATE EVENT

Eventos são tarefas executadas de acordo com um cronograma. Portanto, os eventos são frequentemente chamados de eventos programados.

Para criar um novo evento, você usa a CREATE EVENTinstrução. Aqui está a sintaxe básica da CREATE EVENTinstrução:

CREATE EVENT [IF NOT EXIST] event_name
ON SCHEDULE schedule
DO
event_bodyLinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta sintaxe:

Primeiro, especifique o nome do evento que deseja criar após as  CREATE EVENTpalavras-chave. Os nomes dos eventos devem ser exclusivos no mesmo banco de dados.

Segundo, especifique uma programação após as  ON SCHEDULEpalavras-chave.

Se o evento for único, use a sintaxe:

AT timestamp [+ INTERVAL]Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Se o evento for recorrente, você usa a EVERYcláusula:

EVERY interval 
STARTS timestamp [+INTERVAL] 
ENDS timestamp [+INTERVAL]Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Especifica STARTSquando o evento começa a se repetir e ENDSespecifica quando o evento para de se repetir.

Terceiro, coloque uma instrução SQL para executar após a DOpalavra-chave.

Se você tiver várias instruções, poderá usar o BEGIN...ENDbloco. Observe que você pode chamar um procedimento armazenado dentro do corpo de um evento.

Exemplos de instruções CREATE EVENT do MySQL

Vejamos alguns exemplos de criação de novos eventos.

1) Criando um exemplo de evento único

O exemplo a seguir cria um evento pontual que insere uma nova linha em uma tabela.

Primeiro, crie um novo banco de dados chamado mydbe crie uma nova tabela chamada messagesdentro do mydbbanco de dados:

CREATE DATABASE IF NOT EXISTS mydb;

USE mydb;

CREATE TABLE IF NOT EXISTS messages (
    id INT AUTO_INCREMENT PRIMARY KEY,
    message VARCHAR(255) NOT NULL,
    created_at DATETIME DEFAULT NOW()
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Segundo, crie um evento usando a CREATE EVENTinstrução:

CREATE EVENT IF NOT EXISTS one_time_log
ON SCHEDULE AT CURRENT_TIMESTAMP
DO
  INSERT INTO messages(message)
  VALUES('One-time event');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O evento one_time_log é um evento único que é executado imediatamente quando é criado. Ele insere uma nova linha na messagestabela.

Terceiro, recupere os dados da messagestabela:

SELECT * FROM messages;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----+----------------+---------------------+
| id | message        | created_at          |
+----+----------------+---------------------+
|  1 | One-time event | 2024-01-07 10:45:07 |
+----+----------------+---------------------+
1 row in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Para mostrar todos os eventos no mydbbanco de dados, use a seguinte instrução:

SHOW EVENTS FROM mydb;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

Empty set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

A saída não mostra nenhuma linha porque o evento é descartado automaticamente quando expira. Nesse caso, é um evento único e expira quando sua execução for concluída.

Para manter o evento após sua expiração, você usa a ON COMPLETION PRESERVEcláusula.

A instrução a seguir cria outro evento único que é executado após seu tempo de criação de 1 minuto e não é descartado após a execução:

CREATE EVENT one_time_log
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
ON COMPLETION PRESERVE
DO
   INSERT INTO messages(message)
   VALUES('Preserved One-time event');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Aguarde 1 minuto e recupere os dados da tabela de mensagens:

SELECT * FROM messages;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----+---------------------------+---------------------+
| id | message                   | created_at          |
+----+---------------------------+---------------------+
|  1 | One-time event            | 2024-01-07 10:45:07 |
|  2 | Preserved One-time event  | 2024-01-07 10:48:10 |
+----+---------------------------+---------------------+
2 rows in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Se você executar a  SHOW EVENTSinstrução, verá que o evento existe por causa do efeito da  ON COMPLETION PRESERVEcláusula:

SHOW EVENTS FROM mydb;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+------+--------------+----------------+-----------+----------+---------------------+----------------+----------------+--------+------+---------+------------+----------------------+----------------------+--------------------+
| Db   | Name         | Definer        | Time zone | Type     | Execute at          | Interval value | Interval field | Starts | Ends | Status  | Originator | character_set_client | collation_connection | Database Collation |
+------+--------------+----------------+-----------+----------+---------------------+----------------+----------------+--------+------+---------+------------+----------------------+----------------------+--------------------+
| mydb | one_time_log | root@localhost | SYSTEM    | ONE TIME | 2024-01-07 10:48:10 | NULL           | NULL           | NULL   | NULL | ENABLED |          1 | cp850                | cp850_general_ci     | utf8mb4_0900_ai_ci |
+------+--------------+----------------+-----------+----------+---------------------+----------------+----------------+--------+------+---------+------------+----------------------+----------------------+--------------------+
1 row in set (0.01 sec)Linguagem de código:  PHP  ( php )

2) Criando um exemplo de evento recorrente

A instrução a seguir cria um evento recorrente que é executado a cada minuto e expira dentro de 1 hora a partir do horário de criação:

CREATE EVENT recurring_log
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
   INSERT INTO messages(message)
   VALUES(CONCAT('Running at ', NOW()));Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Observe que utilizamos cláusulas STARTSe ENDSpara definir o prazo de validade do evento. Você pode testar esse evento recorrente aguardando alguns minutos e verificando a messagestabela.

SELECT * FROM messages;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----+--------------------------------+---------------------+
| id | message                        | created_at          |
+----+--------------------------------+---------------------+
|  1 | One-time event                 | 2024-01-07 10:45:07 |
|  2 | Preserved One-time event.      | 2024-01-07 10:48:10 |
|  3 | Running at 2024-01-07 10:49:47 | 2024-01-07 10:49:47 |
|  4 | Running at 2024-01-07 10:50:47 | 2024-01-07 10:50:47 |
|  5 | Running at 2024-01-07 10:51:47 | 2024-01-07 10:51:47 |
+----+--------------------------------+---------------------+
5 rows in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Resumo

  • Use a CREATE EVENTinstrução para criar um evento agendado.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *