Mysql Avançado - Programação Trigger

Índice
Mysql avançado - Programação de gatilho
Um Triggers é um objeto dentro do banco de dados que executa uma ação quando uma operação ou evento ocorre no banco de dados.
Exemplo quando um ingresso de entrada é vendido, nós descontamos um assento disponível.
O código genérico é
CRIAR ACIONADOR nome do gatilho
{ANTES | DEPOIS DE }
// Será executado antes ou depois do evento
{INSERT | ATUALIZAÇÃO | EXCLUIR}
// ação ou evento que dispara o gatilho
ON tablename
// nome da tabela que afetou o evento
PARA CADA LINHA
instrução sql a ser executada
Criamos o exemplo de venda de ingressos para um evento ou produto em estoque. Para testar isso, você pode usar o phpmyadminn ou qualquer software que ofereça suporte a procedimentos armazenados e gatilhos.
Nós criamos o banco de dados
CRIAR BANCO DE DADOS `vendas`
Nós criamos 2 tabelas
A mesa para guardar os ingressos vendidos
CRIAR TABELA `tickets` (
`id` int (10) NOT NULL AUTO_INCREMENT,
`idevent` int (11) NÃO NULO,
`nroticket` int (11) NÃO NULO,
CHAVE PRIMÁRIA (`id`)
) ENGINE = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 1;
A tabela para armazenar a disponibilidade de ingressos para um determinado evento
CRIAR TABELA SE NÃO EXISTIR `estoque` (
`idevent` int (10) NÃO NULO,
`stockactual` int (10) NÃO NULO
) MOTOR = CHARSET PADRÃO MyISAM = latin1;
CREATE TABLE `events` (
`idevent` int (10) NOT NULL AUTO_INCREMENT,
`evento` int (11) varchar (200),
data `date` NOT NULL,
CHAVE PRIMÁRIA (`idevent`)
) ENGINE = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 1;
Criamos a trigger como uma consulta sql, neste caso usamos o software HEIDISQL gratuito, a instrução NEW.column_name
a indica qual campo da operação de gatilho vamos usar na execução neste caso de evento, se houver mais eu sempre os utilizo com NOVO na frente,
CREATE TRIGGER `update_stock` APÓS INSERT ON` tickets`
PARA CADA
FILEIRA
ATUALIZAR estoque SET stockactual = estoque real -1 ONDE idevent = NEW.idevent

Executamos a instrução SQL e vemos que o gatilho foi realmente criado:

A título de exemplo inserimos no estoque da mesa 500 tickets disponíveis para um evento, aqui não haverá resposta da trigger já que a criamos para ser executada caso ocorra uma inserção nos tickets de mesa.
INSERT INTO `sales``stock` (` eventide`, `current stock`) VALUES ('1', '500');

Agora vamos tentar a magia dos gatilhos
Suponha que vendamos o ingresso número 100 para o evento 1 e inserimos a venda no banco de dados de ingressos
INSERT INTO tickets (idevent, nroticket) VALUES ('1', '100');
Vamos observar o que aconteceu na tabela de estoque e veremos que o estoque para este evento agora tem 499 ingressos disponíveis, pois o encarte na tabela bilhete Eu atiro e corro o tigre update_stock.
O uso desta metodologia permite transparência de execução tanto para o usuário quanto para o programador, sabendo que uma ação será executada se outro a aciona e assim evitar tarefas rotineiras como atualizar um estoque em caso de vendas, imagine isso se a venda for uma mercado com milhares de produtos, vemos como com algumas linhas de código resolvemos um grande problema.
Outro exemplo poderia ser remover um produto do depósito e retirar o estoque
CREATE TRIGGER `Lower_products` APÓS DELETE ON` products`
PARA CADA

DELETE FROM stock WHERE productid = NEW.productid
FILEIRA
As possibilidades são infinitas e você pode ir fundo em situações mais complexas, os gatilhos são um ótimo complemento para procedimentos armazenadosGostou 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