Pular para o conteúdo principal

Questão de Banco de Dados — MySQL — FCC 2024

Banco de DadosMySQL
Código
fc147229
Banca
FCC
Órgão
SEAD PI
Ano
2024
Cargo
Ana Gov ( )
Considere o seguinte código exemplo escrito em MySQL: CREATE TRIGGER antes_de_Inserir_conta BEFORE (I) contas FOR EACH ROW (II)   IF NEW. saldo < 0 THEN       SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Saldo não pode ser negativo”,   END IF; END;   As lacunas I e II são preenchidas, coem respectivamente, por
  1. ASTART - INSERT ON contas
  2. BSTART ON - BEGIN
  3. CINSERT ON - BEGIN
  4. DINSERT AT - START
  5. EBEGIN - INSERT ON contas
Revelar gabarito e comentário

GabaritoC — INSERT ON - BEGIN

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: sintaxe de criação

Gabarito: letra C. A lacuna I é preenchida por INSERT ON (especificando a tabela e o evento que dispara o trigger) e a lacuna II por BEGIN (iniciando o bloco de comandos do trigger). A sintaxe correta do MySQL exige CREATE TRIGGER nome BEFORE INSERT ON tabela FOR EACH ROW BEGIN ... END;.

Uma trigger (gatilho) é um objeto de banco de dados que associa um conjunto de instruções SQL a um evento específico (INSERT, UPDATE ou DELETE) sobre uma tabela. Quando o evento ocorre, o banco executa automaticamente as instruções definidas no trigger. No MySQL, a sintaxe básica é:

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

O BEFORE indica que o trigger é executado antes do evento, permitindo validar ou modificar os dados antes de serem persistidos. O FOR EACH ROW especifica que o trigger será executado para cada linha afetada pela operação. O bloco BEGIN ... END delimita o corpo do trigger, onde ficam as instruções a serem executadas.

No exemplo da questão, o trigger antes_de_Inserir_conta é do tipo BEFORE INSERT ON contas, ou seja, será executado antes de cada inserção na tabela contas. Dentro do bloco BEGIN, há uma validação: se o saldo da nova conta for negativo, o trigger emite um sinal de erro (SIGNAL SQLSTATE '45000'), impedindo a inserção. Essa é uma prática comum para garantir a integridade dos dados.

A pegadinha da questão está em confundir a ordem dos elementos da sintaxe. O INSERT ON deve vir após o BEFORE, indicando o evento e a tabela. O BEGIN inicia o bloco de comandos. Alternativas que colocam START ou BEGIN no lugar errado estão incorretas.

  1. 1CREATE TRIGGER nome
  2. 2BEFORE/AFTER
  3. 3INSERT/UPDATE/DELETE ON tabela
  4. 4FOR EACH ROW
  5. 5BEGIN ... END
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

A alternativa A sugere START - INSERT ON contas. O START não é uma palavra-chave válida para iniciar o bloco de comandos de um trigger no MySQL. O correto é BEGIN. Além disso, a ordem INSERT ON contas está correta, mas o START invalida a alternativa.

Alternativa B — ❌ Incorreta

A alternativa B sugere START ON - BEGIN. O START ON não é uma sintaxe válida para especificar o evento e a tabela do trigger. O correto é INSERT ON (ou UPDATE ON, DELETE ON). O BEGIN está correto, mas o START ON invalida a alternativa.

Alternativa C — ✅ Correta ⟵ GABARITO

A alternativa C sugere INSERT ON - BEGIN. O INSERT ON especifica corretamente o evento (INSERT) e a tabela (contas) que dispara o trigger. O BEGIN inicia o bloco de comandos do trigger. A sintaxe completa fica: CREATE TRIGGER antes_de_Inserir_conta BEFORE INSERT ON contas FOR EACH ROW BEGIN ... END;. Portanto, esta é a alternativa correta.

Alternativa D — ❌ Incorreta

A alternativa D sugere INSERT AT - START. O AT não é uma palavra-chave válida para especificar a tabela do trigger no MySQL. O correto é ON. Além disso, o START não é válido para iniciar o bloco de comandos; o correto é BEGIN.

Alternativa E — ❌ Incorreta

A alternativa E sugere BEGIN - INSERT ON contas. O BEGIN não pode vir antes da especificação do evento e da tabela. A ordem correta é: BEFORE INSERT ON contas FOR EACH ROW BEGIN ... END;. O BEGIN deve vir após o FOR EACH ROW, não antes do INSERT ON.

Gabarito: letra C

Link permanente: /questoes/fc147229