DaniloTec 0 Denunciar post Postado Outubro 22, 2007 Boa tarde a todos. Estou com o seguinte problema: Tenho uma base de dados em SQL Server que tem que ser "clonada" para outra base de dados MySql da seguinte forma: Se tiver o registro -Atualizar Senão -Inserir Eu vi que no MySql tem um comando chamado REPLACE INTO que resolve esse problema com um só comando. Ao montar a string de REPLACE ele insere os dados norlammente, porém, quando ela roda novamente ela não atualiza nenhum dado, ela simplesmente insere os dados duplicando a tabela. A string ficou da seguinte forma: replace into cadastro_ocomon (usuario,login,email) values ('" & apelido & "','" login & "','" email"')Sabem o que está acontecendo?!?! Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Outubro 22, 2007 Amigão, porque não usas o UPDATE ? mysql_query("UPDATE tabela SET campo='valor_novo'"); Compartilhar este post Link para o post Compartilhar em outros sites
Wagner Bianchi 0 Denunciar post Postado Outubro 25, 2007 O REPLACE INTO somente substituirá dados quando houver violação de chaves, ou seja, se você definir estrategicamente um íncice na tabela alvo do comando, ele substituirá os valores e não repetirá nenhuma linha, de acordo com a chave-primária definida, por exemplo. Veja o que não poderá repitir que ele não somará e sim, irá inserir somente. Muito cuidado pois em algumas situação, o REPLACE poderá ser um DELETE seguido por um INSERT. Na melhor das hipóteses, Stored Procedure...com ela você terá como checar se a tupla já existe ou não para tomar uma decisão, se atualiza ou insere. Abração, DEUS Abençõe!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Eclesiastes 2 Denunciar post Postado Outubro 28, 2007 Usando o INSERT mesmo! Veja abaixo: Se você especificar se uma cláusula ON DUPLICATE KEY UPDATE (noca no MySQL 4.1.0), e uma linha que causasse a duplicação de um valor fosse inserida em uma chave PRIMARY ou UNIQUE, um UPDATE da linha antiga seria realizado. Por exemplo, o comando: mysql> INSERT INTO table (a,b,c) VALUES (1,2,3) -> ON DUPLICATE KEY UPDATE c=c+1; no caso da coluna a ser declarada como UNIQUE e ja existir o valor 1, o exemplo acima seria idêntico a mysql> UPDATE table SET c=c+1 WHERE a=1; Nota: se a coluna b também for única, o comando UPDATE seria escrito como mysql> UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1; e se a=1 OR b=2 casasse com diversas linhas, somente uma linha será atualizada! em geral, deve-se tentar evitar utilizar a cláusula ON DUPLICATE KEY em tabelas com múltiplas chaves UNIQUE. Desde o MySQL 4.1.1 pode-se utilizar a função VALUES(nome_coluna) para se referir ao valor da coluna na parte INSERT do comando INSERT ... UPDATE - que é o valor que seria inserido se não houvesse conflitos de chaves duplicadas. Esta função é especialmente útil em inserções de múltiplas linhas. Naturalmente a função VALUES() só tem sentido em um comando INSERT ... UPDATE e retorna NULL no caso de outros comandos. Exemplo: mysql> INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) -> ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(B); O camondo acima e idêntico a mysql> INSERT INTO table (a,b,c) VALUES (1,2,3) -> ON DUPLICATE KEY UPDATE c=3; mysql> INSERT INTO table (a,b,c) VALUES (4,5,6) -> ON DUPLICATE KEY UPDATE c=9; A utilizar ON DUPLICATE KEY UPDATE, a opção DELAYED é ignorada. Boa!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Wagner Bianchi 0 Denunciar post Postado Outubro 28, 2007 Opa, Se ele tiver o valor que será atualizado, é isso mesmo!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Freelife 2 Denunciar post Postado Novembro 22, 2012 Fala povo, venho ressuscitar esse tópico com o seguinte SQL: INSERT INTO table( id, user, data, trafego ) VALUES ('3','1','2012-11-22','1'), ('1','2','2012-11-22','5') ON DUPLICATE KEY UPDATE trafego = XXX A questão é que esse SQL é gerado automaticamente, tem muitas linhas de values, e são geradas em um loop. Quero atualizar o ítem trafego quando o usuário já existir na table, mas não encontro uma maneira de fazer isso. O comando REPLACE funciona, porém, ele deleta e insere um novo item na table com isso gerando um novo id(o que não é desejado no momento). Alguém pode ajudar? Abç Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Novembro 22, 2012 Talvez com uma trigger. Compartilhar este post Link para o post Compartilhar em outros sites
Freelife 2 Denunciar post Postado Novembro 22, 2012 Talvez com uma trigger. Vlw pela dica. Eu não sei se entendi direito, mas com TRIGGER durante o InSERT ele vai somar tudo né?! Na verdade eu preciso que ele pegue o valor atual do tráfego e substitua pelo novo valor, isso somente para o usuário X. CREATE TRIGGER up_trafego BEFORE INSERT ON table FOR EACH ROW SET @trafego = NEW.trafego; Eu criei o trigger, porém, ele dá como "duplicated entry"... Ainda não foi dessa vez... Alguma sugestão? Abç Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Novembro 22, 2012 +OU- ISTO ... CREATE TRIGGER up_trafego AFTER INSERT ON table FOR EACH ROW UPDATE TRAFEGO SET VALOR = NEW.VALOR WHERE CHAVE = NEW.CHAVE; Compartilhar este post Link para o post Compartilhar em outros sites
Freelife 2 Denunciar post Postado Novembro 23, 2012 É realmente com trigger não funcionou. Ele até salvava a trigger, mas, na hora de executar dizia que não podia fazer o update pq o command trigger já tem update incluso. acabei fazendo um outra torina para id's que já existiam no bd. Isso é temporário, pq imagina quando BD tiver milhares de registros... Se alguém puder dar mais uma ajuda, agradeço. Agradeço também a quem já ajudou!!! Abç Compartilhar este post Link para o post Compartilhar em outros sites