Pular para o conteúdo principal

Questão de Banco de Dados — Gatilhos (Triggers) — CESPE / CEBRASPE 2025

Banco de DadosGatilhos (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
  1. ABEFORE TRUNCATE são executados antes de apagar as linhas e permitem cancelar a operação lançando erro.
  2. BAFTER DELETE são acionados antes de remover fisicamente a linha, de modo que, durante seu processamento, a linha ainda permanece na tabela.
  3. 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.
  4. 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.
  5. 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.

Gabarito: letra C

Link permanente: /questoes/ce195362