Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Dúvida] DELETE e UPDATE do Trigger

Eu notei que ao inserir novos registros ela faz um "UPDATE" na tabela faturamentodiario, mas o Trigger foi criado com DELETE, como se dá essa atualização?

CREATE TRIGGER CalculaFaturamentoDiario
AFTER INSERT ON itenspedidos
FOR EACH ROW
BEGIN
    DELETE FROM faturamentodiario;
    INSERT INTO faturamentodiario (dia, faturamentototal)
    SELECT DATE(datahorapedido) AS dia, SUM(ip.precounitario) AS faturamentodiario
    FROM pedidos AS p
    INNER JOIN itenspedidos AS ip
    ON p.id = ip.idpedido
    GROUP BY dia
    ORDER BY dia;
END;
1 resposta

Ei! Tudo bem, William?

É muito comum essa confusão no início, mas o que está acontecendo aí não é um comando UPDATE disfarçado, e sim uma estratégia de limpeza e recálculo total.

Como funciona essa Trigger?

O comportamento de "atualização" que você notou acontece devido à combinação dos comandos DELETE e INSERT rodando em sequência toda vez que um novo registro entra na tabela itenspedidos.

O fluxo interno que o banco de dados executa é o seguinte:

  • AFTER INSERT ON itenspedidos: insere um novo item no pedido. O banco ativa a Trigger.

  • DELETE FROM faturamentodiario;: A primeira ação da Trigger é apagar absolutamente todos os registros que já existiam na tabela de faturamento. Ela fica completamente vazia.

  • INSERT INTO ... SELECT ...: Logo em seguida, o banco executa uma consulta que recalcula o faturamento de todos os dias históricos (somando tudo de novo, inclusive o novo item que acabou de ser inserido) e insere esses dados do zero na tabela limpa.

Então, visualmente, parece que o banco de dados atualizou (UPDATE) o faturamento dos dias, mas por trás dos panos ele deletou tudo e recalculou o histórico inteiro.

Deu para compreender como o DELETE seguido do INSERT simula esse efeito de atualização na tabela? Espero que sim!

Conte sempre conosco e até mais!

Conteúdos para complementar seus estudos
Esse conteúdo pode estar em inglês, para traduzi-lo utilize o tradutor automático do navegador ou clique com o botão direito do mouse sobre a página e selecione a opção Traduzir para o português.
Caso este post tenha lhe ajudado, por favor, marcar como solucionado