Pular para o conteúdo principal

Questão de Banco de Dados — Triggers — FGV 2023

Banco de DadosTriggers
Código
fg161201
Banca
FGV
Órgão
DPE RS
Ano
2023
Cargo
Ana ( )

Num comando de criação de um trigger no MySQL, nas recentes edições, há um conjunto de elementos sintáticos que podem ser utilizados para determinar quando os procedimentos devem ser acionados e quais são esses procedimentos.

 

As possíveis combinações de “quando x procedimento” válidas para triggers de transações são:

  1. AAFTER/BEFORE combinados com DELETE/INSERT/UPDATE;
  2. BCREATION/REMOTION combinados com READ/WRITE;
  3. CIN/OUT combinados com CREATION/REMOTION;
  4. DINIT/END combinados com INPUT/OUTPUT;
  5. ESTARTING/FINISHING combinados com READ/ REWRITE/WRITE.
Revelar gabarito e comentário

GabaritoA — AFTER/BEFORE combinados com DELETE/INSERT/UPDATE;

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”.

Triggers no MySQL: combinações válidas de tempo e evento

Gabarito: letra A. Em triggers de transações (DML), as combinações válidas de "quando" e "procedimento" são AFTER/BEFORE (tempo de execução) combinados com DELETE/INSERT/UPDATE (eventos que disparam o gatilho). Essa é a sintaxe padrão do MySQL e da maioria dos SGBDs relacionais, conforme a documentação oficial do MySQL e a literatura de banco de dados.

O que é um trigger?

Um trigger (ou gatilho) é um procedimento armazenado que é executado automaticamente pelo SGBD em resposta a um evento específico. Ele não é invocado diretamente pelo usuário — é disparado pelo banco quando a operação associada ocorre. A função principal é manter a integridade dos dados, auditar alterações ou propagar mudanças entre tabelas.

A estrutura básica de um trigger segue o modelo evento-condição-ação:

  1. Evento: a operação que dispara o trigger (INSERT, UPDATE, DELETE).

  2. Condição: uma expressão opcional que, se verdadeira, faz o trigger executar.

  3. Ação: o bloco de comandos SQL que será executado.

A sintaxe do CREATE TRIGGER no MySQL

No MySQL, a sintaxe para criar um trigger é:

CREATE TRIGGER nome_do_trigger
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON nome_da_tabela
FOR EACH ROW
BEGIN
    -- comandos SQL
END;

Os dois elementos centrais são:

  • Tempo de execução: BEFORE (antes do evento) ou AFTER (depois do evento).

  • Evento disparador: INSERT, UPDATE ou DELETE.

Essas são as únicas combinações válidas para triggers de transações (DML). O MySQL não suporta outras combinações como CREATION/REMOTION, IN/OUT, INIT/END ou STARTING/FINISHING — essas palavras nem existem na sintaxe de triggers.

Por que as outras alternativas estão erradas?

As alternativas B, C, D e E usam termos que não fazem parte da sintaxe de triggers em nenhum SGBD relacional:

  • CREATION/REMOTION: não são palavras-chave do SQL para triggers. O correto seria CREATE/DROP (para criar/remover o trigger), mas não são usadas como tempo de execução.

  • IN/OUT: são usados em parâmetros de procedures/funções, não em triggers.

  • INIT/END: não existem na sintaxe de triggers. O correto seria BEGIN/END (para delimitar o bloco de comandos), mas não são tempos de execução.

  • STARTING/FINISHING: não são palavras-chave do SQL para triggers.

Exemplo prático

Suponha que você queira registrar em uma tabela de auditoria toda vez que um funcionário for inserido na tabela funcionarios:

CREATE TRIGGER trg_auditoria_insert
AFTER INSERT ON funcionarios
FOR EACH ROW
BEGIN
    INSERT INTO auditoria (tabela, operacao, data_hora)
    VALUES ('funcionarios', 'INSERT', NOW());
END;

Esse trigger será executado após cada INSERT na tabela funcionarios, gravando um registro de auditoria.

Distinção importante: triggers DML vs DDL

É importante não confundir os eventos que disparam triggers:

Tipo de trigger

Eventos disparadores

DML (transações)

INSERT, UPDATE, DELETE

DDL (definição)

CREATE, ALTER, DROP

Operações de banco

SERVERERROR, LOGON, LOGOFF, STARTUP, SHUTDOWN

A questão pede especificamente as combinações para triggers de transações, que são apenas as DML: BEFORE/AFTER com INSERT/UPDATE/DELETE.

A pegadinha da banca

A banca tenta confundir o candidato com termos que parecem fazer sentido, mas não existem na sintaxe de triggers. Palavras como CREATION, REMOTION, INIT, STARTING são inventadas ou usadas em outros contextos (como parâmetros de procedures). O candidato que não conhece a sintaxe exata pode ser induzido a escolher uma alternativa com termos "plausíveis".

NÃO CAIA NESSA!

A banca usa termos que não existem na sintaxe de triggers (CREATION, REMOTION, INIT, STARTING) para confundir. O candidato que não domina a sintaxe exata pode achar que qualquer combinação de palavras "técnicas" é válida. A única combinação correta é BEFORE/AFTER com INSERT/UPDATE/DELETE.

1Tempo de execução
BEFORE
AFTER
2Evento disparador
INSERT
UPDATE
DELETE
3Combinações válidas
BEFORE + INSERT/UPDATE/DELETE
AFTER + INSERT/UPDATE/DELETE
Trigger (MySQL)
LEVELsoulevel.com.br
Trigger (MySQL): Tempo de execução (BEFORE, AFTER); Evento disparador (INSERT, UPDATE, DELETE); Combinações válidas (BEFORE + INSERT/UPDATE/DELETE, AFTER + INSERT/UPDATE/DELETE)

Alternativa A — ✅ Correta ⟵ GABARITO

Esta é a única alternativa que apresenta as combinações realmente válidas para triggers de transações no MySQL: AFTER/BEFORE (tempo de execução) com DELETE/INSERT/UPDATE (eventos DML). Essa é a sintaxe padrão documentada no MySQL e em todos os SGBDs relacionais.

Alternativa B — ❌ Incorreta

CREATION/REMOTION não são palavras-chave da sintaxe de triggers. O correto seria CREATE/DROP (para criar/remover o trigger), mas não são usadas como tempo de execução. Além disso, READ/WRITE não são eventos que disparam triggers — triggers são disparados por operações DML (INSERT, UPDATE, DELETE), não por leituras.

Alternativa C — ❌ Incorreta

IN/OUT são usados em parâmetros de procedures e funções, não em triggers. CREATION/REMOTION também não existem na sintaxe de triggers. A combinação é totalmente inválida.

Alternativa D — ❌ Incorreta

INIT/END não são palavras-chave da sintaxe de triggers. O correto seria BEGIN/END (para delimitar o bloco de comandos), mas não são tempos de execução. INPUT/OUTPUT também não são eventos de trigger.

Alternativa E — ❌ Incorreta

STARTING/FINISHING não são palavras-chave do SQL para triggers. READ/REWRITE/WRITE não são eventos que disparam triggers — apenas INSERT, UPDATE e DELETE são eventos DML válidos.

Conclusão

A única combinação válida para triggers de transações no MySQL é BEFORE/AFTER (tempo) com INSERT/UPDATE/DELETE (evento). As demais alternativas usam termos que não existem na sintaxe ou que pertencem a outros contextos do SQL.

Gabarito: letra A

Link permanente: /questoes/fg161201