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?
- Validar dados antes de uma operação.
- Manter auditoria de alterações.
- Atualizar outras tabelas automaticamente.
- Garantir regras de negócio diretamente no banco.
2. Quando uma Trigger é executada?
- BEFORE: Executa antes da operação (INSERT, UPDATE, DELETE) acontecer.
- AFTER: Executa depois da operação acontecer.
Exemplos de eventos que disparam triggers:
Evento | Significado |
---|---|
BEFORE INSERT | Antes de inserir um dado |
AFTER INSERT | Depois de inserir um dado |
BEFORE UPDATE | Antes de atualizar um dado |
AFTER UPDATE | Depois de atualizar um dado |
BEFORE DELETE | Antes de deletar um dado |
AFTER DELETE | Depois 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.
Add Comment