Copiar dados de um tabela para outra em MySQL

Hoje precisei copiar dados de uma tabela para outra. Mas como fazer isso facilmente atraves de linha de comando? … vou dizer, mas antes vamos as premissas:

* Não quero registros repetidos, neste caso o e-mail

* Não quero todos os dados da tabela Servidor (onde vou pegar os dados).

* So quero os e-mails começados com a letra “a”.

Então, vamos a dica:

1
INSERT INTO tabela2  (nome, email) SELECT nome, email FROM tabela1 WHERE (email LIKE 'a%') GROUP BY email

Logico que os dados acima são fictícios, mas funciona. A explicação basica é:

1- O comando INSERT como outro qualquer na tabela2 (a que vai receber os dados)

2- Em seguida vem um SELECT normal tambem, com os campos que desejo importar na mesma ordem que eu coloquei para inserir.

3- O WHERE para a condição dos e-mails começando com a letra “a”.

4- O GROUP BY para não repetir os e-mails. Poderia usar tambem o DISTINCT ou similar, fica a critério do fregues.

Se tiver alguma duvida sobre MySQL pode perguntar, se eu souber irei responder com certeza.

35 Responses to “Copiar dados de um tabela para outra em MySQL”

  1. Estêvão Samuel Procópio Says:

    Opa! INSERT … SELECT é muito útil sim… mas se vc ainda não tiver a tabela2, pode usar assim também:

    SELECT nome, email INTO tabela2 FROM tabela1 WHERE (email LIKE ‘a%’) GROUP BY email

  2. Isso ae Tevaum…. no seu exemplo ele irá criar uma tabela com os campos nome e email. :)

  3. Diogo, to com umas idéias bacanas pro flogvip ! Uma delas pode até estimular os usuários a quererem o GoldVIP* ! Bom, eu tento falar contigo, mas nem sempre sou respondido. Caso te interesse as idéias e minha ajuda (sei que não é nada milagroso, mas é o que posso fazer pelo meu vício haha) me avise ! Abraço.

  4. No caso de eu ter duas conexões no banco, em uma está a tabela1, e na outra a tabela2; como faço pra criar a tabela1 com os dados da tabela2, sendo elas de “lugares” diferentes -uma não enxerga a outra?

  5. edmir moreira Says:

    e ai bicho, vc sumiu…. preciso muito falar com vc.

  6. Ótimas dicas, parabéns !

  7. Elane, recomendo voce exportar para um aquivo SQL e depois importar na outra tabela atraves desse arquivo.

  8. Muito boa a dica!!
    Parabéns

  9. E se as tabelas tiverem nome diferente?

    Ex:

    INSERT INTO tabela2 (nome2, email2) SELECT nome, email FROM tabela1 WHERE (email LIKE ‘a%’) GROUP BY email

    Seria assim?

  10. Euridio Diogo Says:

    Muito util o codigo obrigada

    Não sei se é aqui onde coloco a minha duvida, mas estou meio desesperado, é que eu preciso de um comando que faça o seguinte,

    quando inserir o numero de identificação de um produto, logo na text box do nome do produto gravado com o numero de identificação que digitamos, se existir tal comando por favor me ajude

  11. Euridio Diogo Says:

    Muito util o codigo obrigada

    Não sei se é aqui onde coloco a minha duvida, mas estou meio desesperado, é que eu preciso de um comando que faça o seguinte,

    quando inserir o numero de identificação de um produto, logo na text box do nome do produto apareça o nome do producto correspondente ao numero de identificação que digitamos, se existir tal comando por favor me ajude *me expressei mal no post anterior*

  12. Euridio, isso é até facil de se fazer.

    Primeiro voce da o INSERT normal para ele gerar o ID, que deve ser uma chave primaria. Para recuperar este ID, use no PHP:
    $UltimoID = mysql_insert_id();

    Este comando deve estar logo abaixo a query insert do mysql. Ae depois é so você dar um UPDATE logo abaixo com o ID recuperado, ae resolve o seu problema.

  13. Basta usar o comando:

    create table copia_tabela select * from tabela;

    Abraços

  14. Oii, encontrei exatamente o que eu precisava… *-*
    fiz o que está ali e tals, e aconteceu algo estranho…
    quando eu cadastro os dados, após o ultimo passo eu coloquei os inserts…
    ai qndo fui olhar no bd, ele havia criado 3 nomes, um sem nenhum dos dados das outras tabelas, outro com um dos dados de uma das tabelas e sem nenhum nome, e o outro com o dado da outra tabela sem nome e semo dado da primeira tabela…
    não sei se fui clara… fiz um print do que aconteceu mas não sei se é possível colocar imagens aqui…

  15. Isadora, recebi seu email, estarei respondendo por la, ok?

  16. Como faço para copiar os dados de uma tabela de um servirdor para outro?

    Quero fazer a cópia de determinados dados de uma tabela (TABELAX) do meu servidor de produção para o meu servidor BACKUP.
    Como posso fazer isso ????

  17. Edson, basta voce usar o comando mysqldump e gerar um SQL. Depois é so importar o arquivo no outro servidor.

  18. Bom Dia…
    Estou com um caso parecido… Tenho uma tabela1 com os seguintes paramentros (id_cham e nome) que quero enviar para a tabela2 so q ja tenho estes parametros criados…somente queria inserir os dados.. as colunas ja existem…teria como fazer isso?

  19. Eduardo, so utilzar o INSERT como SELECT.

  20. Não consegui usar como o Estêvão disse:
    “Opa! INSERT … SELECT é muito útil sim… mas se vc ainda não tiver a tabela2, pode usar assim também:

    SELECT nome, email INTO tabela2 FROM tabela1 WHERE (email LIKE ‘a%’) GROUP BY email”

    Assim funcionou:

    CREATE TABLE tabela_nova SELECT id, nome FROM tabela_antiga

    Referência: http://dev.mysql.com/doc/refman/5.0/en/create-table.html

  21. Andreia Melo Says:

    Boa noite

    Eu tenho uma tabela e gostaria de duplicar, de modo queseja criada uma linha logo abaixo, desta forma:

    andreia1 xxxx xxxx xxx
    andreia2 xxxx xxxx xxx

    Para ficar assim:

    andreia1 xxxx xxxx xxx
    andreia1 xxxx xxxx xxx
    andreia2 xxxx xxxx xxx
    andreia2 xxxx xxxx xxx

    Mas nao consigo encontrar uma formula para isso, alguem pode me ajudar?

    Grato

  22. Olá Diogo,

    qual comando devo utilizar para copiar em sua integridade uma tabela do bancoA para o bancoB?
    Não quero copiar os dados, quero acrescentar uma tabela inexistente no bancoB que só existe em bancoA, tem como?

  23. Andreia, você quer fazer isso em uma linguagem ou direto no MySQL?

  24. Vanessa, Uma tabela, voce diz um campo? Sera isso? Não entendi sua pergunta.

  25. Olá Diogo,

    Tipo estou estou procurando algo parecido com isso mas por exemplo no meu caso eu tenho 2 tabelas uma para processo e outra para finalizados em meu sistema. E tipo eu preciso que depois de uma ação de clique eu ela muda para outra tabela(finalizados) a questão é que se eu usar o insert ae nesta ação para mudar para a outra tabela o que aconteceria é que quando eu fosse usar a função normal para inserir um dado em minha tabela(processos) ele ja enviaria para a segunda tabela sendo que eu só quero que isso aconteça depois de eu clicar no botão para finalizar. Se vc poder me ajudar fico grato.

  26. Lukas, certamente nao usaria este comando. Voce deve fazer atraves de dois comandos mesmo. Um insert e um delete. Ou ainda fazer atraves de um triggers. ;)

  27. Otima dica Obrigado Mesmo Funciono 100%

  28. Preciso inserir dados de uma tabela em outra, mais em um banco de dados diferente.

    tentei colocando o nome do banco.tabela mais nao funciona…

    cTxtSQL := ‘INSERT INTO `turnos.est_000500` (`Codigo`, `Cod_Barras`, `Grupo`, `SubGrupo`, `Descricao`, `inicio`, `Est_Pista`, `Est_Deposito`, `Custo`) ‘;
    cTxtSQL := cTxtSQL + ‘SELECT `Codigo`, `Cod_Barras`, `Grupo`, `SubGrupo`, `Descricao`, `Est_Pista`, `Est_Pista`, `Est_Deposito`, `Custo_Nota` FROM `estoque.produtos` ‘;

  29. Jr. Velame Says:

    Bom dia, preciso fazer algo semelhando Comando:
    INSERT INTO produtos (precovendai) SELECT precoven FROM prenota

    retorno do banco: [suporte] ERROR 1062: Entrada ” duplicada para a chave 2

    Como proceder??

  30. Antonio Carlos Says:

    boa tarde,
    tenho uma tabela onde tenho dois codigos e dois locais de estoque:
    codigo filial local_estoq qtd
    00013 00 01 10
    00013 00 00 00
    00015 00 01 20
    00015 00 00 00

    sendo assim eu preciso copiar tudo que tiver o codigo igual colocar a quantidade igual.
    me ajudem não sem nem como começar. tenho conhecimento muinto fraco em mysql.

  31. Seguinte tua dica me ajudou muito, mas estou com um problema, tenho duas tabalas
    tabela1 com campos nome, emai
    tabela2 com campos nome, email, idsuser

    gostaria que esse id user fosse um campo que digitasse e não vem de outra tabela tipo

    INSERT INTO tabela2 (nome, email, iduser) SELECT nome, email FROM tabela1 WHERE (email LIKE ‘a%’) GROUP BY email

    somo eu iria inserir esse iduser sem ele está em outra tabela

  32. Wilson, mais facil você fazer um loop em php pra isso, do que pelo MySQL. Se você for manager de BD, faz um script que da tambem.

  33. Antonio, so fazer SET codigo=quantidade WHERE codigo=codigo2 … nao seria isso?

  34. Jr. Velame, É porque este campo é um INDEX UNIQUE. Basta remover este index da tabela e popular novamente, ok?

  35. Ola

    Muito boa idéia

    Usei numa tabela para reorganizar o id que é autoincremental e tive que deletar algumas linhas e tava cheio de buraco

    Copiei os dados da tabela1 para a tabela2 menos o id que foi recriado sem buracos e depois delete tabela 1 e renomeiei tabela2 para tabela 1 e a performance

    Obrigado
    Marcos

Leave a Reply