Ir ao conteúdo
  • Cadastre-se

MySQL Problema em entender como o UPDATE funciona com TRIGGERS no MYSQL.


Posts recomendados

Tudo bem galera, gostaria de saber como esse TRIGGER trataria os dados:

 

DELIMITER //
CREATE TRIGGER tr_teste 
AFTER UPDATE ON table_foo
	INSERT INTO table_foo2(ID_table_foo, nome)
	VALUES(NEW.table_foo.ID,NEW.table_foo.nome);
//
DELIMITER ;

A tupla que sofreu o UPDATE é toda tratada como os elementos NEW(Novos) ou somente os campos que sofreram alteração que vão ser considerados como NEW? 

Link para o comentário
Compartilhar em outros sites

Não encontrei nada sobre restrição a utilização do OLD.campoA, OLD.campoB, aparentemente eles estarão disponíveis com todos os campos da tupla.

Só não vai ter OLD, se for um INSERT, e não vai ter NEW se for um DELETE, mas UPDATE deve ter os 2.

Eu achei um exemplo que ele usa assim:

DELIMITER //
     CREATE TRIGGER `insert_emplyee_history` AFTER INSERT ON `EMPLOYEE`
     FOR EACH ROW BEGIN
          INSERT INTO `EMPLOYEE_HISTORY` VALUES (NEW.`NOME`, NEW.`SSN`, NEW.`SALARIO`, NEW.`DNO`);
     END//
DELIMITER ;

Acho que falta o FOR EACH ROW para o seu caso, pois um UPDATE pode afetar vários registros.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@RodrigoeKathland Polette 

Sim, kkkk... é que criei esse trigger na correria, minha dúvida era se no caso eu tivesse uma tabela com os campos:

ID:1 

Nome: José

Valor: 20

/****************/

ID:2

Nome: Maria

Valor:30

/***************/

 

E caso eu fizesse o UPDATE do Valor de José, os campos que seriam considerados como NEW, seriam os ultimos inseridos juntamente do Valor que foi atualizado, ou se seriam somente os campos da linha em que houve a atualização do campo.

 

UPDATE table_foo

SET Valor = 50

WHERE ID =1;

 

Alternativas do meu pensamento:

 

NEW.ID = 2

NEW.Nome = 'Maria'

New.Valor = 50 (do ID = 1 pertencente a José)

 

OU

 

New.ID = 1

New.Nome = 'José'

New.Valor = 50

 

No caso a segunda alternativa é a correta, consegui pegar através de teste. Apesar deu ter lido um pouco da documentação de INSERT/DELETE/UPDATE, ainda não entendo como o MySQL trata dados do tipo NEW. Pois os ID = 1 e Nome = 'José' não seriam valores novos e somente o Valor 50 seria o novo. 

 

No caso do INSERT faz sentido, pois todos os dados que vão ser inseridos ou que foram inseridos são novos, assim como no caso do DELETE, pois todos os dados do DELETE serão velhos, pois já não existem ou deixarão de existir naquela tabela. 

 

De qualquer forma agradeço por tentar ajudar! :thumbsup:

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

Não entendo muito de TRIGGERS mas pela experiência que tenho em programação, ele trata os NEW como o mesmo valor se não for alterado.

 

Em outras palavras,   Se não houver mudanças, ele repete o mesmo valor, para que não fique "vazio".

 

PS: posso estar errado :P 

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...