"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso atualizar com segurança uma tabela dentro de um gatilho após uma atualização na mesma tabela no SQL?

Como posso atualizar com segurança uma tabela dentro de um gatilho após uma atualização na mesma tabela no SQL?

Publicado em 2024-12-22
Navegar:102

How Can I Safely Update a Table Within a Trigger After an Update on the Same Table in SQL?

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.

Tutorial mais recente Mais>

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