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.