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.
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
- Gatilhos “ANTES/DEPOIS”
- Palavras-chave NOVAS/ANTIGAS
- Gerenciamento de gatilhos
- CRIAR EVENTO: Agendamento de eventos
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
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 ;
▶ Exemplo: Trigger BEFORE UPDATE
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 ;
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
-- View Triggers
SHOW TRIGGERS;
-- Delete Trigger
DROP TRIGGER IF EXISTS trg_after_insert_user;
6. Agendador de eventos
▶ Exemplo: Tarefas agendadas
-- 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();
❓ 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
- Os gatilhos são executados automaticamente quando os dados são alterados
- ANTES É acionado antes da operação; DEPOIS É acionado após a operação
- NOVO é o novo valor, ANTIGO é o valor anterior
- O Agendador de Eventos implementa tarefas agendadas
📝 Exercícios
-
Questão básica (Dificuldade: ⭐): Crie um gatilho para registrar automaticamente as alterações na tabela de usuários.
-
Exercício avançado (Dificuldade: ⭐⭐): Crie um gatilho BEFORE UPDATE para atualizar automaticamente o campo
updated_at. -
Desafio (Dificuldade: ⭐⭐⭐): Crie um agendador de eventos que exclua, todos os dias à meia-noite, os dados de log de até 30 dias atrás.