Atualizando uma tabela em um gatilho após atualização na mesma tabela
No SQL, atualizando uma tabela em um gatilho após uma atualização no mesma tabela apresenta um problema potencial. Isso ocorre porque a tabela já está bloqueada para a operação de atualização e a tentativa de acessar a tabela dentro de um gatilho executado como parte da mesma transação pode resultar em um conflito.
Para contornar essa restrição, você pode atualizar o colunas afetadas no gatilho usando a opção BEFORE em vez de AFTER. Isso permite que você atualize as colunas da tabela antes que a operação de atualização original ocorra, garantindo que as alterações necessárias sejam feitas na tabela antes que a transação seja finalizada.
Considere o seguinte exemplo:
CREATE TRIGGER upd_total_votes BEFORE UPDATE ON products_score FOR EACH ROW BEGIN SET new.votes_total = new.votes_1 new.votes_2 new.votes_3 new.votes_4 new.votes_5 END ;
Neste exemplo, o gatilho será executado antes de cada operação de atualização na tabela products_score. Ele calculará o novo valor para a coluna vote_total com base nos valores das colunas atualizadas (votes_1 a vote_5) e o armazenará na coluna virtual new.votes_total fornecida pelo contexto do acionador.
Quando você atualiza a tabela , o gatilho garantirá que a coluna vote_total seja atualizada adequadamente, mesmo que a instrução de atualização não atualize explicitamente a própria coluna vote_total.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3