Ícone do site dfilitto

O que é uma Trigger?

Curso gratuito - Como trabalhar com o Banco de dados MySQL

Trigger é um tipo especial de procedimento armazenado que é executado automaticamente pelo banco de dados em resposta a certos eventos que acontecem em uma tabela, como inserção, atualização ou exclusão de dados.

Para que serve uma Trigger?


2. Quando uma Trigger é executada?

Exemplos de eventos que disparam triggers:

EventoSignificado
BEFORE INSERTAntes de inserir um dado
AFTER INSERTDepois de inserir um dado
BEFORE UPDATEAntes de atualizar um dado
AFTER UPDATEDepois de atualizar um dado
BEFORE DELETEAntes de deletar um dado
AFTER DELETEDepois de deletar um dado

3. Sintaxe básica para criar uma Trigger no MySQL

sqlCopiarEditarCREATE TRIGGER nome_da_trigger
    {BEFORE | AFTER} {INSERT | UPDATE | DELETE}
    ON nome_da_tabela
    FOR EACH ROW
BEGIN
    -- comandos SQL
END;

4. Exemplo prático

Vamos criar um exemplo simples para entender melhor.

Contexto

Temos uma tabela funcionarios que armazena dados dos funcionários:

CREATE TABLE funcionarios (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(100),
salario DECIMAL(10,2),
data_admissao DATE
);

E uma tabela de auditoria que registra alterações no salário:

CREATE TABLE auditoria_salario (
id INT AUTO_INCREMENT PRIMARY KEY,
funcionario_id INT,
salario_antigo DECIMAL(10,2),
salario_novo DECIMAL(10,2),
data_alteracao TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Objetivo da Trigger

Quando um salário for atualizado na tabela funcionarios, registrar na tabela auditoria_salario o salário antigo e o novo.


Código da Trigger

DELIMITER $$

CREATE TRIGGER trg_auditoria_salario
AFTER UPDATE ON funcionarios
FOR EACH ROW
BEGIN
IF OLD.salario <> NEW.salario THEN
INSERT INTO auditoria_salario(funcionario_id, salario_antigo, salario_novo)
VALUES (OLD.id, OLD.salario, NEW.salario);
END IF;
END$$

DELIMITER ;

5. Testando a Trigger

-- Inserir um funcionário
INSERT INTO funcionarios (nome, salario, data_admissao) VALUES ('João Silva', 3000.00, '2020-01-10');

-- Atualizar salário do funcionário
UPDATE funcionarios SET salario = 3500.00 WHERE id = 1;

-- Verificar auditoria
SELECT * FROM auditoria_salario;

No resultado, veremos o registro da alteração do salário.

Caso não saiba como Instalar o MySQL, preparar o banco de dados para uso e executar os comandos no terminal assista a seguinte playlist.

Sair da versão mobile