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