Gatilhos ou gatilhos Mysql - Definindo eventos e momentos

Índice
A declaração que cria um gatilho é
CRIAR TRIGGER trigger_name hora do evento ON tabela ON CADA LINHA

Momento
Pode ser AFTER ou BEFORE, ou seja, depois ou antes de ocorrer um evento sql, como criar um registro, excluir, selecionar, pesquisar, modificar, etc.
Evento
Chamamos qualquer uma das operações sql de evento, pode ser INSERT, UPDATE ou DELETE. As seleções não podem ser feitas a partir de triggers (Select * from…), esta operação é executada a partir de procedimentos armazenados e não de triggers.
Instruções gerais e comandos para gerenciar gatilhos ou gatilhos
Criamos um gatilho para uma auditoria nas vendas de uma agência de automóveis, cada vez que uma operadora ou vendedor modifica os dados de um cliente, automaticamente em uma tabela de audits_cliente iremos indicar a data e hora, quem fez a alteração e quem é o cliente que foi modificado
 CRIAR TRIGGER client_audit_trigger APÓS ATUALIZAR OS clientes PARA CADA LINHA INSERIR EM client_audit (client_audit (clientid, modify_by, date) VALORES (OLD.clientid, NEW.idoperator, NOW ()) 

Consultar todos os gatilhos disponíveis no banco de dados
Mostrar gatilhos

Nesse caso, aquele que criamos audita o cliente e vemos sua funcionalidade em diferentes colunas, um evento de atualização na tabela de clientes que fará uma inserção e seu usuário administrador é root
Exclua um gatilho do banco de dados
DROP TRIGGER triggername

Como chamar procedimentos armazenados em um gatilho
Vamos analisar um exemplo de base de dados de produtos e que ao gerar uma venda um vendedor também deve gerar a comissão que ganha, então a comissão por venda deve ser atualizada após inserir ou gerar a nova venda ou também pode ser após gerar uma fatura , dependendo do modelo de negócio a ser desenvolvido, mas basta que o exemplo seja compreendido.
Criamos um procedimento armazenado que calculará a comissão com base na quantidade de um produto vendido.
 DELIMITER $$ CREATE PROCEDURE pa_commission` (IN p_vendor ID INT, IN p_product ID INT, IN quantidade INT) BEGIN DECLARE totalcommission INT DEFAULT 0; Selecione a comissão de produtos onde productid = p_productid; totalcommission = comissão * p_amount inserir nos valores das comissões (vendedor, comissão) (id do vendedor, id do produto, comissão, comissão total); END $$ DELIMITER $$ 

Agora criamos o novo gatilho de venda. Este gatilho será executado após inserir uma venda e retirar os dados deste ou do detalhe de venda.
 CRIAR ACIONADOR nova venda APÓS INSERIR nas vendas PARA CADA LINHA COMEÇAR CHAMADA pa_commissions (vendedor new.id, new.idproduct, new.quantity); END $$ 

Podemos ver que o procedimento armazenado é chamado para poder consultar os dados do produto, a comissão e assim poder calcular automaticamente o valor da comissão.
Poderíamos também torná-lo mais complexo permitindo saber se a comissão e a venda já existem, modificá-la e não inseri-la novamente.
Para isso devemos reconhecer também o número de venda ou fatura, então procuramos se o produto já existe no número de venda e vendedor, isso implica que ele já existe e foi comissionado, portanto iremos modificar e não inserir como uma nova venda.
 selecione contagem (productid)> 0 em já existe a partir de comissões onde sellerid = sellerid e salesid = salesid; se já existir, UPDATE commissions set comissão = totalcommission onde sellerid = sellerid e salesid = salesid; caso contrário, insira nos valores das comissões (vendedor, comissão) (id do vendedor, id do produto, comissão, comissão total); fim se; 
Gostou e ajudou este tutorial?Você pode recompensar o autor pressionando este botão para dar a ele um ponto positivo
wave wave wave wave wave