MySQL: Triggers do MySQL e o Agendador de Eventos

Última atualização: 2026-08-26

Um trigger é um procedimento armazenado que é executado automaticamente — ele é acionado automaticamente quando os dados são alterados.

Esta aula aborda os gatilhos e o agendador de eventos.

100%
graph TB
    A[Data Change Events] --> B{Trigger Conditions}
    B -->|BEFORE| C[Triggered before the operation]
    B -->|AFTER| D[Triggered after the operation]
    C --> E[BEFORE INSERT<br/>Pre-insertion Validation/Edit]
    C --> F[BEFORE UPDATE<br/>Pre-update Validation/Edit]
    C --> G[BEFORE DELETE<br/>Verify Before Deleting]
    D --> H[AFTER INSERT<br/>Post-insertion synchronization]
    D --> I[AFTER UPDATE<br/>Update Log]
    D --> J[AFTER DELETE<br/>Clean Up After Deletion]
    A --> K[Event Scheduler]
    K --> K1[Scheduled Execution]
    K --> K2[A one-time event]

1. O que você vai aprender


2. Uma história real

(1) Desafio: As operações manuais costumam resultar em omissões

Depois que o sistema de comércio eletrônico entrou em operação, a equipe de operações reclamava diariamente: o estoque não era deduzido após a realização dos pedidos, os registros de auditoria não eram atualizados após alterações de preço e um acúmulo de sessões expiradas estava deixando as consultas mais lentas. A equipe de desenvolvimento continuava adicionando lógica ao código de negócios, mas sempre havia alguém que se esquecia — como o código dos diferentes serviços era escrito de forma isolada, simplesmente não havia como garantir a consistência em todo o sistema.

(2) Solução utilizando gatilhos e eventos

Use gatilhos para automatizar ações no nível do banco de dados: deduzir o estoque após a realização de um pedido e registrar as alterações após modificações; use o agendador de eventos para limpar periodicamente os dados expirados.

Dimensão Lógica de nível de aplicação Automação de banco de dados
Risco de omissão Alto (depende do desenvolvedor) Zero (acionado automaticamente)
Consistência entre serviços Difícil de garantir Camada de banco de dados unificada
Carga operacional Requer a implantação de tarefas programadas Agendador de eventos integrado
Confiabilidade Moderada Máxima

3. Noções básicas sobre gatilhos

▶ Exemplo: Trigger AFTER INSERT

SQL
DELIMITER //
CREATE TRIGGER trg_after_insert_user
AFTER INSERT ON users
FOR EACH ROW
BEGIN
    INSERT INTO user_logs (user_id, action, created_at)
    VALUES (NEW.id, 'INSERT', NOW());
END //
DELIMITER ;
▶ Experimente

▶ Exemplo: Trigger BEFORE UPDATE

SQL
DELIMITER //
CREATE TRIGGER trg_before_update_user
BEFORE UPDATE ON users
FOR EACH ROW
BEGIN
    SET NEW.updated_at = NOW();
    
    IF NEW.email != OLD.email THEN
        SET NEW.email_verified = FALSE;
    END IF;
END //
DELIMITER ;
▶ Experimente

4. As palavras-chave “NEW” e “OLD”

Gatilho NOVO ANTIGO
INSERIR Linha recém-inserida Não disponível
ATUALIZAÇÃO Valor revisado Valor original
EXCLUIR Indisponível Linhas excluídas

5. Gerenciamento de gatilhos

SQL
-- View Triggers
SHOW TRIGGERS;

-- Delete Trigger
DROP TRIGGER IF EXISTS trg_after_insert_user;

6. Agendador de eventos

▶ Exemplo: Tarefas agendadas

SQL
-- Start the Event Scheduler
SET GLOBAL event_scheduler = ON;

-- Create an event that runs daily
CREATE EVENT evt_daily_cleanup
ON SCHEDULE EVERY 1 DAY
STARTS '2026-07-04 02:00:00'
DO
    DELETE FROM temp_data WHERE created_at < DATE_SUB(NOW(), INTERVAL 30 DAY);

-- Create a One-Time Event
CREATE EVENT evt_one_time
ON SCHEDULE AT '2026-07-10 00:00:00'
DO
    UPDATE promotions SET status = 'expired' WHERE end_date < CURDATE();
▶ Experimente

❓ Perguntas Frequentes

P: Os gatilhos podem modificar outras tabelas? R: Sim. Os gatilhos podem realizar operações INSERT, UPDATE e DELETE em outras tabelas.

P: Os gatilhos afetam o desempenho? R: Eles são acionados para cada linha, e o impacto é perceptível durante operações em lote. Use com cautela.

P: O agendador de eventos vem ativado por padrão? R: Ele vem desativado por padrão. É necessário usar o SET GLOBAL event_scheduler = ON; para ativá-lo.

P: Os gatilhos podem chamar programas externos? R: Não. Os gatilhos só podem executar instruções SQL; eles não podem chamar comandos do sistema operacional nem APIs externas.

P: Qual é o número máximo de gatilhos por tabela? R: Apenas um gatilho pode ser acionado para o mesmo evento ao mesmo tempo. Isso significa um máximo de 6 gatilhos por tabela (BEFORE/AFTER × INSERT/UPDATE/DELETE).


📖 Resumo


📝 Exercícios

  1. Questão básica (Dificuldade: ⭐): Crie um gatilho para registrar automaticamente as alterações na tabela de usuários.

  2. Exercício avançado (Dificuldade: ⭐⭐): Crie um gatilho BEFORE UPDATE para atualizar automaticamente o campo updated_at.

  3. Desafio (Dificuldade: ⭐⭐⭐): Crie um agendador de eventos que exclua, todos os dias à meia-noite, os dados de log de até 30 dias atrás.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%