Questão de Banco de Dados — MySQL — FCC 2024
- Código
- fc147229
- Banca
- FCC
- Órgão
- SEAD PI
- Ano
- 2024
- Cargo
- Ana Gov ( )
- ASTART - INSERT ON contas
- BSTART ON - BEGIN
- CINSERT ON - BEGIN
- DINSERT AT - START
- EBEGIN - INSERT ON contas
GabaritoC — INSERT ON - BEGIN
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.
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.
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.
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.
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.
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