Observe o script a seguir, no âmbito do MySQL.CREATE TRIGGER...

Próximas questões
Com base no mesmo assunto
Q873279 Banco de Dados
Observe o script a seguir, no âmbito do MySQL.
CREATE TRIGGER xpto BEFORE INSERT ON T FOR EACH ROW SET @s = @s + NEW.quant;
A presença do termo NEW refere-se:
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Resposta Correta: D

A questão aborda um conceito importante em banco de dados MySQL que é o uso de triggers. Um trigger é um tipo de procedimento armazenado que é automaticamente executado em resposta a certos eventos na tabela associada, como inserções, atualizações ou exclusões. Neste caso específico, estamos lidando com um trigger que é acionado antes de uma inserção na tabela T (BEFORE INSERT).

Quando se cria um trigger para a ação de inserção, o MySQL fornece duas palavras-chave especiais para acessar os valores das colunas: NEW e OLD. NEW é usada para se referir aos valores que estão sendo inseridos na linha nova, enquanto OLD é usada para se referir aos valores da linha antes de ser atualizada, sendo esta última aplicável somente em triggers de update.

A alternativa D afirma que o termo NEW refere-se ao valor da coluna quant de um registro sendo inserido na tabela T. Isso está correto, pois no contexto do trigger, a referência NEW.quant é utilizada para acessar o valor da coluna quant do novo registro que está prestes a ser inserido na tabela. A variável @s é, portanto, incrementada com o valor dessa coluna a cada inserção de um novo registro.

As demais alternativas não descrevem corretamente o uso do termo NEW em um trigger de MySQL:

  • A sugere que NEW se refere ao valor padrão de uma coluna, o que não está correto, já que o valor padrão é definido na criação da tabela e não no momento da inserção.
  • B menciona um método de um atributo estruturado, o que é incorreto porque não estamos discutindo métodos ou atributos estruturados, mas sim o valor de uma coluna.
  • C fala sobre uma função de inicialização de colunas autonumeradas, que também não é aplicável a este contexto.
  • E sugere que NEW se refere ao número total de registros, o que é uma confusão com o conceito de contagem de linhas afetadas por uma operação, e não tem relação com o valor de uma coluna individual em uma nova linha inserida.

Portanto, entender a função do termo NEW em um trigger é essencial para resolver a questão e para o trabalho com triggers no MySQL em geral.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Definir dados de antes (OLD) e depois (NEW)

Em meio aos TRIGGERS temos dois operadores importantíssimos que nos possibilitam acessar as colunas da tabela alvo do comando DML, ou seja, podemos acessar os valores que serão enviados para a tabela tbl_cliente antes (BEFORE) ou depois (AFTER) de um UPDATE, por exemplo. Tais operadores nos permitirão então, ter dois momentos, o antes e o depois e também examinar os valores para que sejam ou não inseridos, atualizados ou excluídos da tabela.

Antes mesmo de analisarmos os operadores, temos que analisar vejamos as seguintes diretrizes:

INSERT: o operador NEW.nome_coluna, nos permite verificar o valor enviado para ser inserido em uma coluna de uma tabela. OLD.nome_coluna não está disponível.

DELETE: o operador OLD.nome_coluna nos permite verificar o valor excluído ou a ser excluído. NEW.nome_coluna não está disponível.

UPDATE: tanto OLD.nome_coluna quanto NEW.nome_coluna estão disponíveis, antes (BEFORE) ou depois (AFTER) da atualização de uma linha.

Percebemos então que, ao inserir uma nova linha em uma tabela, temos os valores das colunas disponível através do operador NEW.nome_coluna, quando excluímos uma linha, temos ainda os valores das colunas da linha excluída através do operador OLD.nome_coluna e temos os dois operadores disponíveis no UPDATE e no REPLACE pois as duas declarações consistem em um DELETE seguido por um INSERT. (REPLACE, este comando apresenta outros detalhes a serem analisados numa próxima oportunidade).

 

https://www.devmedia.com.br/mysql-triggers/8088

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo