Triggers são blocos de código SQL que são automaticamente executados ou "disparados" quando um determinado evento ocorre em uma tabela do banco de dados. Eles são comumente usados para manter a integridade dos dados, registrar auditorias, ou executar ações automáticas quando os dados em uma tabela são modificados.
Vamos explorar três tipos comuns de triggers: AFTER INSERT, BEFORE DELETE, e AFTER UPDATE.
O trigger AFTER INSERT é executado automaticamente após a inserção de um novo registro em uma tabela. Ele é útil quando você precisa realizar uma ação logo após a inserção, como registrar um log, atualizar outra tabela ou enviar notificações.
Exemplo: Suponha que temos uma tabela Pedidos
e uma tabela Logs_Pedidos
. Queremos registrar cada novo pedido que é inserido na tabela Pedidos
na tabela Logs_Pedidos
.
CREATE TRIGGER log_after_insert_pedido
AFTER INSERT ON Pedidos
FOR EACH ROW
BEGIN
INSERT INTO Logs_Pedidos (id_pedido, acao, data_hora)
VALUES (NEW.id_pedido, 'INSERT', NOW());
END;
Explicação:
log_after_insert_pedido
é definido para ser executado após um INSERT
na tabela Pedidos
.FOR EACH ROW
indica que o trigger será executado para cada linha inserida.NEW.id_pedido
refere-se ao valor do id_pedido
recém-inserido.Logs_Pedidos
com o id_pedido
, a ação 'INSERT', e a data/hora atual.O trigger BEFORE DELETE é executado antes de um registro ser deletado de uma tabela. Ele é útil para verificar condições, evitar exclusões indesejadas, ou realizar ações antes da exclusão, como registrar auditorias ou transferir dados para uma tabela de histórico.
Exemplo: Suponha que temos uma tabela Empregados
e queremos registrar as exclusões de empregados em uma tabela Historico_Exclusoes
antes que o registro seja realmente excluído.
CREATE TRIGGER historico_before_delete_empregado
BEFORE DELETE ON Empregados
FOR EACH ROW
BEGIN
INSERT INTO Historico_Exclusoes (id_empregado, nome, data_exclusao)
VALUES (OLD.id_empregado, OLD.nome, NOW());
END;
Explicação:
historico_before_delete_empregado
é definido para ser executado antes de um DELETE
na tabela Empregados
.OLD.id_empregado
e OLD.nome
referem-se aos valores do registro que será excluído.Historico_Exclusoes
, registrando a exclusão antes que ela ocorra.