Questão nº 70
Questão de Tecnologia da Informação · FGV TRF1 2024 (nº 70)
No contexto do ambiente MySQL, considere o script abaixo.
```
CREATE
DEFINER= '... '
TRIGGER banco.exemplo
AFTER UPDATE ON banco.t1 FOR EACH ROW
BEGIN
INSERT into t2 VALUES
(user(),
CONCAT('Nome’, OLD.nome, NEW.nome)
);
END
```
De acordo com o que foi apresentado, conclui-se que:
- Aé gravado um registro na tabela t2 para todas as alterações de reescrita em t1; (alternativa correta)
- Bhá um erro, pois a cláusula “FOR EACH ROW” não se aplica nesse caso;
- Chá um erro, pois OLD e NEW não foram devidamente declarados;
- Dsão inseridos na tabela t2 todos os nomes presentes na tabela t1;
- Esão registradas na tabela t2 somente as operações de reescrita que alteraram o conteúdo da coluna nome de t1.
Resposta comentada
Gabarito Alternativa A
Um trigger no MySQL é um código especial que é executado automaticamente quando um evento específico (como INSERT, UPDATE ou DELETE) ocorre em uma tabela. Ele permite automatizar ações em resposta a mudanças nos dados.
- (A) Correta: A cláusula
AFTER UPDATE ON banco.t1 FOR EACH ROWsignifica que o trigger será executado depois de cada linha ser atualizada (reescrita) na tabelat1. Como o corpo do trigger contém um comandoINSERT into t2, um novo registro será gravado emt2para cada uma dessas linhas atualizadas emt1. - (B) Incorreta: A cláusula
FOR EACH ROWé padrão e correta para triggers no MySQL, indicando que o trigger opera linha por linha. - (C) Incorreta:
OLDeNEWsão pseudocolunas especiais fornecidas automaticamente pelo MySQL dentro do trigger para acessar os valores da linha antes (OLD) e depois (NEW) da operação, não necessitando de declaração. - (D) Incorreta: O trigger é ativado por uma operação de
UPDATEemt1, não por uma varredura completa da tabela. Apenas os nomes das linhas que foram atualizadas serão usados na inserção emt2. - (E) Incorreta: (Armadilha da banca) O trigger
AFTER UPDATE ON banco.t1dispara para qualquer atualização em qualquer coluna de uma linha emt1. Ele não verifica se a colunanomefoi especificamente alterada. Para que isso acontecesse, seria necessário adicionar uma condição explícita dentro do trigger, comoIF OLD.nome <> NEW.nome THEN ... END IF;. Sem essa condição, oINSERTemt2ocorre para qualquer atualização na linha, independentemente de qual coluna foi modificada.
Fonte: FGV TRF1 2024 Analista Judiciário - Análise de Dados (Caderno Tipo 1). Reproduzida para fins de estudo.