Você está na página 1de 11

BANCO DE DADOS II

Gatilhos
(Triggers)

“Se você tem uma maçã e eu tenho outra; e nós trocamos as maçãs,
Profº: Joseph Donald então cada um terá sua maçã. Mas se você tem uma ideia e eu tenho
outra, e nós as trocamos; então cada um terá duas ideias.”
Contatos:
joseph.vieira@facape.br
George Bernard Shaw
Banco de Dados II
Profº: Joseph Donald
Gatilhos (Triggers)
• É um rotina SQL associada a uma tabela

• É executada automaticamente quando uma ação de inserção, alteração ou


exclusão é feita em uma linha

• São associados automaticamente às DMLs: Insert, Update e Delete


Banco de Dados II
Profº: Joseph Donald
Gatilhos (Triggers)
Os gatilhos possuem:

• Indicadores de tempo: BEFORE ou AFTER


✓ Determina quando um gatilho dispara
✓ BEFORE: ações do gatilho são executadas antes da operação associada
concluir.
✓ AFTER: ações do gatilho são executadas depois da operação associada concluir

• Indicadores de comando: INSERT, UPDATE e DELETE


✓ O comando especifica o tipo de operação SQL que dispara o gatilho.
Banco de Dados II
Gatilhos (Triggers) Profº: Joseph Donald

OLD
• Usado para valores anteriores ou atuais em uma linha que está sendo atualizada
ou excluída na tabela que provoca o disparo do gatilho.
• Não é usado para INSERT
• Sintaxe:
✓ OLD.<nome da coluna>
✓ Exemplo: OLD.valor
NEW
• Conjunto novo de valores de uma linha que está sendo inserida ou atualizada.
• Não é usada para DELETE
• Sintaxe:
✓ NEW.coluna
✓ Exemplo: NEW.salario
Banco de Dados II
Gatilhos (Triggers) Profº: Joseph Donald

Gatilhos são usados para:

✓ Realizar atualizações
✓ Forçar restrições de dados
✓ Converter automaticamente dados
✓ Notificar alterações no banco de dados para as aplicações clientes
✓ Executar atualizações de integridade referencial em cascata
Banco de Dados II
Criação dos Gatilhos (Triggers) Profº: Joseph Donald

SINTAXE:

CREATE TRIGGER <nome da trigger> <timing> <tipo de operação>


ON <nome da tabela>
FOR EACH ROW
<declaração da operação>

Timing = BEFORE ou AFTER


Operação = INSERT, UPDATE ou DELETE
Banco de Dados II
Criação dos Gatilhos (Triggers) Profº: Joseph Donald

EXEMPLO 1:
Crie um gatilho que coloque todos os nomes inseridos na tabela
vendedor em maiúsculo e depois insira um novo vendedor usando letras
minúsculas para verificar o funcionamento do TRIGGER.

CREATE TRIGGER tr_upp_in_nome BEFORE INSERT


ON vendedor
FOR EACH ROW
SET NEW.nome = UPPER(NEW.nome)
Banco de Dados II
Criação dos Gatilhos (Triggers) Profº: Joseph Donald

EXEMPLO 2:
Crie um gatilho que calcula o INSS de acordo com o salário cadastrado.

CREATE TRIGGER tr_in_inss BEFORE INSERT


ON vendedor
FOR EACH ROW
SET NEW.desc_inss = (NEW.SALARIO * (11/100))

Obs: Antes, crie a coluna desc_inss.


Banco de Dados II
Criação dos Gatilhos (Triggers) Profº: Joseph Donald

EXEMPLO 3:
Crie uma tabela chamada “PEDIDOS_CANCELADOS” com os campos (id_ped_canc,
num_pedido, valor_pedido, data_horario)
Depois crie um TRIGGER que registre qualquer pedido deletado na tabela PEDIDO para a
tabela PEDIDOS_CANCELADOS.

DELIMITER //
CREATE TRIGGER tr_del_pedido AFTER DELETE
ON pedido
FOR EACH ROW
BEGIN
INSERT INTO pedidos_cancelados (num_pedido, valor_pedido, data_horario)
VALUES (OLD.id_pedido, OLD.valor, CURRENT_TIMESTAMP);
END //
Banco de Dados II
Exclusão dos Gatilhos (Triggers) Profº: Joseph Donald

SINTAXE:
DROP TRIGGER <nome da trigger>

Exemplo 1: DROP TRIGGER tr_upp_nome

Exemplo 2: DROP TRIGGER tr_inss


Banco de Dados II
Gatilhos (Triggers) Profº: Joseph Donald

VAMOS PRATICAR!!

• Crie um gatilho que recalcula o INSS após uma alteração do salário dos
vendedores.
• Crie um gatilho que calcula a idade dos vendedores de acordo com a
data de nascimento cadastrada.
• Crie um gatilho que calcula a idade dos vendedores após a atualização
da data de nascimento.

Você também pode gostar