segunda-feira, 25 de março de 2013

MySQL: Como Criar Triggers

Criar uma trigger é muito parecido em qualquer que seja o banco de dados que você esteja utilizando, SQL Server, Oracle, Firebird, MySQL... O importante é que você saiba para que serve e  quando utilizar, sabendo isso vem a segunda pergunta: como criar?

O que é uma Trigger
Traduzindo para o português, trigger significa gatilho e se relacionam direto com as tabelas através de comandos como UPDATE, INSERTE e DELETE

Sintaxe


CREATE TRIGGER "nome momento evento"
ON tabela
FOR EACH ROW
BEGIN
/*corpo do código*/
END


Onde e usar uma Trigger

EX: Para as tabelas vendas(Data, ValorTotal) e Itens_Venda(ValorUnitario, QuantidadeItens)  queremos que cada vez que um item for inserido na tabela Itens_Venda o ValorTotal da tabela Venda incremente o mesmo valor então..

Criamos uma trigger IncrementaValorVenda para disparar sempre que um item for adicionado na tabela Itens_venda.

create table venda(
codVenda integer
data date,
ValorTotal integer,
primary key(codVenda)
)

create table ItensVenda(
 ValorUnitario   integer,
 QuantidadeItens Interger,
cod_Venda Integer,
foreign key (cod_venda) references venda(codVenda)
)


DELIMITER $$
 
CREATE TRIGGER Tgr_Itens_Venda_Insert AFTER INSERT
ON Itens_Venda
FOR EACH ROW
BEGIN
    UPDATE venda SET ValorTotal = ValorTotal + NEW.ValorUnitario
    WHERE Cod_venda = NEW.Codvenda;
END$$
 
CREATE TRIGGER Tgr_ItensVenda_Delete AFTER DELETE
ON Itens_Venda
FOR EACH ROW
BEGIN
    UPDATE venda SET ValorTotal = ValorTotal - OLD.ValorUnitario
    WHERE Cod_venda = OLD.Codvenda;
END$$
 
DELIMITER ;


Note que foi criado dois gatilhos, o primeiro Tgr_Itens_Venda_Insert será disparado sempre que for inserido um novo item em Itens_venda  fazendo com que ela some no total da tabela venda e o segundo Tgr_ItensVenda_Delete será disparado cada vez que for deletado um item da tabela Itens_venda. você também poderia criar um para cada vez que for atualizada a tabela itens_venda


AFTER e BEFORE(ANTES E DEPOIS)

No exemplo acima o gatilho será disparado depois que for feia uma inserção na tabela itens_Venda porém se usasse o comando BEFORE, o gatilho seria disparado antes da inserção.

Usamos BEFORE normalmente para fazer consultas complexas na tabela antes de inserir algo nela, ex: antes de inserir vendas quero verificar a data da tabela.


Espero ter ajudado, qualquer dúvida comentem....




Nenhum comentário:

Postar um comentário