Compreendendo e usando trigger em SQL
Triggers em SQL são ferramentas poderosos utilizadas para automatizar processos e garantir integridade de dados em um banco de dados. Este tem como objetivo te mostrar de forma prática o que são Triggers, como elas se aplicam em diferentes sistemas de bancos de dados como MySQL e Oracle, e como implementá-las de forma eficiente.
O que são Triggers em SQL?
Triggers são procedimentos armazenados (ou funções, se preferir) que são ativadas automaticamente em resposta a eventos específicos em tabelas ou views. Estes eventos são representados por inserções, atualizações ou exclusões.
Resumidamente, uma Trigger em SQL é uma ação automática executada quando uma condição específica do banco de dados é realizada.
As triggers são similares a stored procedures, porém sua diferença é que são executadas implicitamente quando ocorre algum evento no banco de dados (como INSERTs, UPDATEs e DELETEs), enquanto as stored procedures, ao contrário, precisam ser executadas explicitamente, por exemplo:
Exemplo de chamada de stored procedure em MySQL:
sql CALL stored_procedure(parameters);Como usar Triggers?
A sintaxe para criação de uma trigger varia de acordo com o banco de dados em que você está trabalhando. Neste artigo, veremos alguns exemplos com os bancos de dados Oracle e MySQL (nos quais, possuem uma grande similaridade em maior parte dos casos).
Uma trigger é sempre composta por:
Momento: define o momento em que é executada, com base no evento (BEFORE ou AFTER).
Evento: dirá com base em qual evento do banco de dados, a trigger será executada. (INSERT, DELETE ou UPDATE).
Tipo: define quantas vezes uma trigger é executada. Pode ser executada para a instrução que a disparou ou ser disparada para cada linha afetada pela instrução que disparou a trigger (STATEMENT ou ROW).
Corpo: a implementação da lógica da trigger.
Exemplo de Trigger em Oracle SQL:
```sql
CREATE OR REPLACE TRIGGER nome_do_trigger -- Cria a trigger
BEFORE INSERT ON nome_da_tabela -- Momento e evento em que será executada
FOR EACH ROW -- Tipo (para cada linha afetada do evento acima)
BEGIN -- Inicia o corpo
-- Código SQL a ser executado
END; -- Fecha o corpo
```
Exemplo de Trigger em MySQL:
```sql
CREATE TRIGGER nome_do_trigger -- Cria a trigger
BEFORE INSERT ON nome_da_tabela -- Momento e evento em que será executada
FOR EACH ROW -- Tipo (para cada linha afetada do evento acima)
BEGIN -- Inicia o corpo
-- Código SQL a ser executado
END; -- Fecha o corpo
```
Exemplo de um cenário real
Supondo que você tenha uma tabela de matrículas de alunos, e precise ter um registro das alterações sempre em que o status dessa tabela `matriculas` for alterado (seja para construção de métricas, ou até governança de dados, conseguindo descobrir quais mudanças foram feitas e em qual data).
Aqui, a tabela logs_matriculas possui a seguinte estrutura:
- `matricula_id`: id da matrícula.
- `status`: status da matrícula (ativa, cancelada ou concluída).
- `criado_em`: data em que o log foi criado.
É interessante ressaltar, que dentro do corpo da trigger temos acesso ao registro NEW (os novos valores da linha após o UPDATE) e o OLD (valores antigos da linha, antes do UPDATE)
Exemplo em MySQL:
```sql
DELIMITER $
CREATE TRIGGER gerar_log_matriculas
AFTER UPDATE ON matriculas
FOR EACH ROW
BEGIN
IF NEW.status <> OLD.status THEN -- Aqui verificamos se o status mudou, assim fazendo o insert
INSERT INTO logs_matriculas (matricula_id, status, criado_em) VALUES (NEW.id, NEW.status, NOW());
END IF;
END$
DELIMITER ;
```
As Vantagens do Trigger:
Preservação da Integridade dos Dados
Assegura que certas condições sejam satisfeitas antes que os dados sejam modificados ou inseridos.
Automação
Automatiza tarefas, reduzindo a quantidade de código necessária e o potencial de erro humano, evitando ações manuais.
Auditoria dos Dados
Possibilita localizar alterações nos dados e registrar informações de auditoria de forma automática.
Comandos Comuns
Aqui estão alguns outros comandos nos quais geralmente trabalhamos em conjunto, quando estamos testando ou desenvolvendo Triggers:
CREATE TRIGGER: Usado para criar uma nova Trigger.
DROP TRIGGER: Usado para excluir uma Trigger existente.
ALTER TRIGGER: Usado para modificar uma Trigger existente.
Conclusão
Triggers em SQL são cruciais para a preservação da integridade, automação e auditoria dos dados, tornando mais fácil a gestão do seu bancos de dados. Cada banco de dados, como Oracle e MySQL, possui suas peculiaridades na implementação de Triggers, mas o conhecimento abrangente do SQL e o entendimento de como as Triggers funcionam podem possibilitar os desenvolvedores a habilidade de explorar todo o seu potencial.
Na criação de Triggers, é crucial avaliar cautelosamente as necessidades do negócio e de desempenho na execução, garantindo que seja uma solução otimizada e eficiente para os problemas que estão sendo enfrentados.