Questão de Banco de Dados — Gatilhos (Triggers) — CESPE / CEBRASPE 2025
Banco de Dados›Gatilhos (Triggers)
Código
ce195362
Banca
CESPE / CEBRASPE
Órgão
BANRISUL
Ano
2025
Nível
Superior
Cargo
Técnico em Tecnologia da Informação II - Área: Administração de Banco de Dados
Em sistemas de gerenciamento de banco de dados relacionais, triggers
ABEFORE TRUNCATE são executados antes de apagar as linhas e permitem cancelar a operação lançando erro.
BAFTER DELETE são acionados antes de remover fisicamente a linha, de modo que, durante seu processamento, a linha ainda permanece na tabela.
CBEFORE INSERT disparam antes de alocar espaço para a nova linha e podem ajustar valores usando NEW, ao passo que triggers AFTER INSERT disparam somente depois de todas as restrições terem sido verificadas e a linha ter sido gravada permanentemente.
DBEFORE UPDATE são executados depois de atualizar os valores, porém antes de reindexar a tabela, permitindo reverter a operação caso alguma condição falhe.
EAFTER TRUNCATE permitem o acesso a dados antigos das linhas por meio de uma pseudotabela OLD, possibilitando registrar o que foi apagado.
Revelar gabarito e comentário▾
GabaritoC — BEFORE INSERT disparam antes de alocar espaço para a nova linha e podem ajustar valores usando NEW, ao passo que triggers AFTER INSERT disparam somente depois de todas as restrições terem sido verificadas e a linha ter sido gravada permanentemente.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Gatilhos (Triggers) em SGBDs Relacionais
Gabarito: letra C. O comportamento correto de um trigger BEFORE INSERT é disparar antes da inserção, permitindo ajustar valores via pseudotabela NEW, enquanto AFTER INSERT dispara após a verificação de restrições e a gravação definitiva da linha. Esse é o fluxo padrão em SQL.
A banca testa o conhecimento sobre os momentos de execução e os eventos dos triggers. Vamos analisar cada alternativa:
Evento
Momento de Execução
Pseudotabela Disponível
Comportamento
BEFORE INSERT
Antes da inserção
NEW
Permite ajustar valores da nova linha
AFTER INSERT
Após verificação de restrições e gravação
NEW
Linha já gravada permanentemente
BEFORE UPDATE
Antes da atualização
NEW e OLD
Permite modificar novos valores
AFTER UPDATE
Após atualização e reindexação
NEW e OLD
Linha já atualizada
BEFORE DELETE
Antes da remoção
OLD
Permite acessar dados antigos
AFTER DELETE
Após remoção física
OLD
Linha já removida
BEFORE/AFTER TRUNCATE
Não dispara (DDL)
Nenhuma
Operação sem trigger
Triggers (gatilhos)
1Evento DML
BEFORE
Antes da operação
Ajusta NEW
AFTER
Após restrições
Linha gravada
2Evento DDL (TRUNCATE)
Não dispara triggers
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
A afirmação sobre "BEFORE TRUNCATE" está incorreta porque, na maioria dos SGBDs (como Oracle, PostgreSQL, MySQL), TRUNCATE é uma operação DDL que não dispara triggers (nem BEFORE nem AFTER). Além disso, não existe a pseudotabela NEW para TRUNCATE, e o comportamento descrito não corresponde à realidade. Triggers BEFORE são típicos de DML (INSERT, UPDATE, DELETE).
Alternativa B — ❌ Incorreta
Um trigger AFTER DELETE dispara depois que a linha já foi removida fisicamente, e não antes. Durante sua execução, a linha já não existe na tabela. A alternativa inverte o momento da execução.
Alternativa C — ✅ Correta ⟵ GABARITO
A alternativa descreve corretamente o ciclo:
O BEFORE INSERT dispara antes da inserção, podendo modificar valores da nova linha por meio da pseudotabela NEW.
O AFTER INSERT dispara após a verificação de todas as restrições (chaves, checks, etc.) e depois que a linha foi efetivamente gravada. É a distinção clássica entre os dois momentos.
Alternativa D — ❌ Incorreta
O trigger BEFORE UPDATE é executado antes da atualização dos valores, e não depois. A expressão "permitindo reverter a operação" não é precisa no contexto descrito; embora seja possível lançar uma exceção para cancelar a operação, o momento está trocado (antes vs. depois).
Alternativa E — ❌ Incorreta
Assim como TRUNCATE não possui triggers tradicionais, não existe pseudotabela OLD para AFTER TRUNCATE. O comando TRUNCATE é uma operação de remoção em massa que não gera linhas individuais para processamento em triggers.
PEGA ESSA DICA!
Para memorizar, use a regra: BEFORE = antes de qualquer alteração (permite modificar NEW), AFTER = depois da operação e da verificação de restrições. Lembre-se que TRUNCATE é DDL e não dispara triggers.