Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite,
Tenho 2 tabelas e gostaria de atulizar o valor de uma utilizando a outra.
Como uma é backup da outra, então os índices são iguais.
O código ficou da seguinte forma mas não resolveu.
SELECT bkp.idanuncio_bkp,bkp.preco_femeas FROM anuncio_bkp AS bkp FOR UPDATE;
UPDATE anuncio SET preco_femeas = bkp.preco_femeas WHERE idanuncio = bkp.idanuncio_bkp;
A ideia do query acima, é percorrer todos os cadastros da base fazendo o update linha por linha, utilizando os dados do select.http://dev.mysql.com/doc/refman/5.0/en/update.html
Motta boa tarde,
Eu não consegui entender . você teria algum exemplo ?
http://dev.mysql.com/doc/refman/5.6/en/trigger-syntax.html
cria uma trigger after update, dentro dela voce tem o OLD e o NEW, esses dois objetos contém todos os dados que voce precisa para atualizar o seu backup
CREATE TRIGGER nomeDaTrigger AFTER UPDATE ON tabelaPrincipal
FOR EACH ROW
BEGIN
UPDATE tabelaDeBackup SET nomeDoCampo=NEW.valorQueVoceQuiser
END;
o NEW pega o valor novo e o OLD o antigo, não sei qual deles voce quer jogar no backup, eu não tenho certeza se da pra colocar o update daquela forma, talvez voce precise colocar em uma string e executar ela dentro da trigger, testa da forma acima que é mais simples, se não der daí coloca o statemment>
http://dev.mysql.com/doc/refman/5.6/en/trigger-syntax.html
cria uma trigger after update, dentro dela voce tem o OLD e o NEW, esses dois objetos contém todos os dados que voce precisa para atualizar o seu backup
CREATE TRIGGER nomeDaTrigger AFTER UPDATE ON tabelaPrincipal
FOR EACH ROW
BEGIN
UPDATE tabelaDeBackup SET nomeDoCampo=NEW.valorQueVoceQuiser
END;
o NEW pega o valor novo e o OLD o antigo, não sei qual deles voce quer jogar no backup, eu não tenho certeza se da pra colocar o update daquela forma, talvez voce precise colocar em uma string e executar ela dentro da trigger, testa da forma acima que é mais simples, se não der daí coloca o statemment
Paulo boa tarde,
Da forma como você passou o banco irá esperar uma ação (update) para atualizar a tabela backup. E o que eu quero é ler o que esta na tabela anuncio (select) e atualizar todos os dados de acordo com a linha percorrida.
Creio que isso se resolve com uma procedure.
Estou tentando criar mais estou tendo problemas na forma de informar os campos do select para as variáveis.
Alguém precisa disparar esse evento, esse cara vai ser o select? Se for, não entendi porque tem que ser ele ja que os dados não são afetados pelo select, logo nem o backup seria....
Alguém precisa disparar esse evento, esse cara vai ser o select? Se for, não entendi porque tem que ser ele ja que os dados não são afetados pelo select, logo nem o backup seria....
Bom vamos lá,
Esse cara simplesmente, vai pegar os dados da tabela backup e em tempo de execução vai atualizar a tabela anuncios.
isso só será feito uma única vez, isto esta sendo feito, porque perdemos os dados da tabela anuncios e subimos o backup.
>
Bom vamos lá,
Esse cara simplesmente, vai pegar os dados da tabela backup e em tempo de execução vai atualizar a tabela anuncios.
isso só será feito uma única vez, isto esta sendo feito, porque perdemos os dados da tabela anuncios e subimos o backup.
senhores, obrigado pela atenção de todos.
Consegui resolver da seguinte forma.
DELIMITER $$
CREATE PROCEDURE atualiza_dados_teste()
BEGIN
DECLARE idlinks2 INT;
DECLARE data_alteracao2 TIMESTAMP;
DECLARE existe_mais_linhas INT DEFAULT 0;
-- Definição do cursor
DECLARE meuCursor CURSOR FOR SELECT idlinks,data_alteracao FROM links;
-- Definição da variável de controle de looping do cursor
DECLARE CONTINUE HANDLER FOR NOT FOUND SET existe_mais_linhas=1;
-- Abertura do cursor
OPEN meuCursor;
-- Looping de execução do cursor
meuLoop: LOOP
FETCH meuCursor INTO idlinks2,data_alteracao2;
UPDATE parceiros SET data_ativacao=data_alteracao2 WHERE idlinks = idlinks2;
-- Controle de existir mais registros na tabela
IF existe_mais_linhas = 1 THEN
LEAVE meuLoop;
END IF;
-- Retorna para a primeira linha do loop
END LOOP meuLoop;
END
observação: o exemplo exposto aqui foi utilizado em outra tabela, sendo assim as colunas estão alteradas.
http://dev.mysql.com/doc/refman/5.0/en/update.html