Buscar

Triggers em Banco de Dados

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

*
*
*
Banco de Dados
Trigger (Gatilhos)
Luciana Vieira
*
*
*
Conceito de trigger
Um trigger é uma procedure que, associada a uma tabela (ou visão), é executada automaticamente quando é inserido, alterado ou removido um registro da tabela.
*
*
*
Conceito de trigger
Os comandos utilizados em um trigger são os mesmos das stored procedures, porém a execução da mesma não é feita pelo usuário e sim pelo SGBD na inserção, alteração ou remoção de registros.
*
*
*
Vantagens de usar triggers
Nos triggers podemos observar as mesmas vantagens oferecidas pelas stored procedures: 
 facilidade de manutenção, 
 maior desempenho das aplicações, 
 redução do tráfego na rede, 
 e melhora da segurança com o controle das regras de negócio diretamente no servidor.
*
*
*
Criando um trigger 
Para criar um trigger utilize o comando CREATE TRIGGER.
Sintaxe:
DELIMITER [definição do caractere de finalização(delimiter $)]
CREATE TRIGGER <nome> <momento> <evento> ON <tabela>
FOR EACH ROW [BEGIN]
 
<sentença>
 
END [uso do caractere de finalização definido($)] 
 
DELIMITER ;
*
*
*
Criando um trigger
nome é a identificação do gatilho
momento é o instante em que o disparo deve ocorrer, podendo ser uma das opções BEFORE (antes) ou AFTER (depois) que serão executadas quando um determinado evento ocorrer; 
evento é a definição da ação que ativa o disparo, podendo ser um dos comandos INSERT, UPDATE ou DELETE; 
tabela é a identificação da tabela do banco de dados que sofrerá a ação 
e sentença é a ação a ser executada quando um determinado disparo ocorrer.Se for definida mais de uma ação, é necessário estabelecer um bloco de ação com os comandos BEGIN e END.
*
*
*
Utilizando um trigger
Um trigger não é utilizado diretamente, ele é disparado pelo SGBD no momento do evento (inserção, alteração ou remoção).
*
*
*
Excluindo um trigger
Para excluir um trigger utilize o comando DROP TRIGGER.
Sintaxe:
DROP TRIGGER <nome do trigger>
EX: DROP TRIGGER Exemplo
*
*
*
Variáveis NEW e OLD
Em um trigger é possível acessar qualquer valor antigo (OLD) ou novo (NEW) de uma coluna. Isto é feito para comparar valores de uma coluna antes e depois de um evento.
Sintaxe:
NEW.coluna
OLD.coluna
*
*
*
Exemplo 1
CREATE TABLE funcionario 
(
	codfun integer (11) NOT NULL, 
	nome varchar (50) NOT NULL, 
	depto char (2), 
	funcao char (20), 
	salario decimal (10,2), 
	dtadmissao date, 
	filhos smallint (6), 
	cpf varchar (11),
	PRIMARY KEY (codfun)
)
*
*
*
Exemplo 1
CREATE TABLE auditoria 
(usuario varchar(40), acao varchar(9), 
dtacao date, 
hracao time, 
codigo integer);
 
*
*
*
Exemplo 1
A seguir serão criadas três triggers para controlar as ações de INSERT (cadastrou), DELETE (demitiu) e UPDATE (alterou), respectivamente, com os nomes tr_auditorInsert, tr_auditorDelete e tr_auditorUpdate. Antes de cada trigger utiliza-se a sigla tr para indicar que é uma trigger.
*
*
*
Exemplo 1: tr_auditorInsert
CREATE TRIGGER tr_auditorInsert AFTER INSERT ON funcionario
FOR each ROW
 INSERT INTO auditoria SET
 codigo = new.codfun,
 usuario = USER(),
 acao = 'Cadastrou',
 dtacao= curdate(),
 hracao = curtime();
 
*
*
*
Exemplo 1: tr_auditorInsert
*
*
*
Exemplo 1: tr_auditorInsert
Em seguida realize um insert na Tabela funcionario como mostrado a seguir:
 
INSERT INTO funcionario VALUES ( 1, Marinalva', '3', 'programador', 1200.00, '2009-10-19',0,'11122233344');
*
*
*
Exemplo 1: Resposta
*
*
*
Exemplo 1: tr_auditorUpdate
CREATE TRIGGER tr_auditorUpdate BEFORE UPDATE ON funcionario
FOR each ROW
 INSERT INTO auditoria SET
 codigo = new.codfun,
 usuario = USER(),
 acao = 'Alterou',
 dtacao= curdate(),
 hracao = curtime();
*
*
*
Exemplo 1: tr_auditorUpdate
*
*
*
Exemplo 1: tr_auditorUpdate
Em seguida realize um Update na Tabela funcionario como mostrado a seguir:
 
UPDATE Funcionario
	SET Salario = Salario * 1.1 WHERE codfun = 1;
*
*
*
Exemplo 1: Resposta
*
*
*
Exemplo 1: tr_auditorDelete
CREATE TRIGGER tr_auditorDelete BEFORE DELETE ON funcionario
FOR each ROW
 INSERT INTO auditoria SET
 codigo = old.codfun,
 usuario = USER(),
 acao = ‘Demitiu',
 dtacao = curdate(),
 hracao = curtime();
*
*
*
Exemplo 1: tr_auditorDelete
*
*
*
Exemplo 1: tr_auditorDelete
 
Em seguida realize um Delete na Tabela funcionario como mostrado a seguir:
 
DELETE FROM Funcionario
	WHERE codfun = 1;
*
*
*
Exemplo 1: Resposta
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando