DevPath · Aprenda a programar ESPTEN

SQL avançado: janelas, views e CASE

Triggers: automatizar reações

O que é um trigger

Um trigger (gatilho) é um bloco de SQL que o banco de dados executa sozinho, de forma automática, quando ocorre um evento sobre uma tabela: um INSERT, um UPDATE ou um DELETE. Serve para manter dados derivados, registrar auditorias ou aplicar regras sem depender de a aplicação se lembrar de fazê-lo.

CREATE TRIGGER nome_trigger
AFTER INSERT ON vendas
BEGIN
  -- SQL a executar quando uma linha é inserida em vendas
END;

AFTER / BEFORE e o evento

As linhas NEW e OLD

Dentro do corpo você tem duas "linhas virtuais" para ler os valores em jogo:

Pseudotabela Disponível em O que contém
NEW INSERT, UPDATE os valores novos da linha.
OLD UPDATE, DELETE os valores anteriores da linha.
CREATE TRIGGER log_vendas
AFTER INSERT ON vendas
BEGIN
  INSERT INTO auditoria (acao, venda_id, valor)
  VALUES ('insercao', NEW.id, NEW.valor);
END;

Assim, cada vez que entrar uma venda, o trigger escreve automaticamente uma linha em auditoria com os dados de NEW. Para comprovar seu efeito, a última sentença consulta a tabela que o trigger preencheu:

INSERT INTO vendas (id, produto_id, dia, valor) VALUES (7, 2, 4, 99);
SELECT acao, venda_id, valor FROM auditoria ORDER BY venda_id;

Os triggers são poderosos mas invisíveis: como agem por conta própria, convém nomeá-los com clareza e documentá-los para que a equipe saiba que existem.

Exemplos

Auditar cada nova venda com um trigger AFTER INSERT

CREATE TABLE auditoria (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  acao TEXT,
  venda_id INTEGER,
  valor REAL
);

CREATE TRIGGER log_vendas
AFTER INSERT ON vendas
BEGIN
  INSERT INTO auditoria (acao, venda_id, valor)
  VALUES ('insercao', NEW.id, NEW.valor);
END;

INSERT INTO vendas (id, produto_id, dia, valor) VALUES (7, 2, 4, 99);
SELECT acao, venda_id, valor FROM auditoria ORDER BY venda_id;
Coloque isto em prática

O DevPath é um curso prático: aqui você lê a teoria; no app você a coloca em prática com exercícios que rodam de verdade, offline.

Comece grátis no app →
← Views e CTEs recursivasVer o módulo →