Recebi o gerenciamento de um banco de dados e tive muito pouca exposição ao MySQL (ou bancos de dados em geral) até agora.
Gostaria de fazer duas coisas, ambas (espero) bastante simples, mas é a combinação das duas que está me causando dificuldade.
No momento, tenho uma tabela muito grande contendo todos os dados. Ele pode ser facilmente dividido em três tabelas menores, pois um dos campos efetivamente possui apenas três valores distintos, pelos quais desejo separá-lo. Presumo que escrever uma consulta para encontrar entradas de cada valor e copiar apenas o correto para uma nova tabela seria muito simples.
No entanto, meu problema é que os campos nesta tabela são muito, muito mal nomeados e com erros ortográficos. Portanto, quando crio minhas novas tabelas, gostaria de renomear muitos dos nomes dos campos. Eu também precisarei adicionar campos.
Existe uma maneira de conseguir isso para que eu possa criar novas tabelas com campos nomeados corretamente e, em seguida, copiar os dados sem nenhuma etapa intermediária?
As duas maneiras óbvias (embora muito desajeitadas) de fazer isso que eu posso ver seriam -
Copie a tabela atual, renomeie todos os campos para corresponder às tabelas recém-projetadas e, em seguida, copie os dados desde que os nomes dos campos correspondam. (Isto não é ideal porque a tabela atual é muito grande, e o problema de campos adicionais nas novas tabelas ainda pode causar problemas?)
Crie as novas tabelas com os mesmos nomes de campos ruins do original. Copie os dados. Altere os nomes dos campos da nova tabela.
Ambos os métodos potenciais parecem muito desajeitados. Existe uma maneira de fazer isso que simplesmente me permite criar uma nova tabela com nomes de campo corretos e transferir os dados antigos facilmente a qualquer momento?
(Por favor, perdoe-me se esta é uma pergunta óbvia ou estranha, sou muito, muito novo nisso. Obrigado.)
Depende da sua volumetria, mas você pode usar uma simples instrução INSERT SELECT.
Sua velha mesa:
Imagine que você deseja substituir fname por firstname, lname por lstname e adicionar um campo de data de nascimento.
Crie sua nova estrutura:
Agora, transfira os dados antigos para a nova tabela, observe que os novos campos (aqui Data de Nascimento) estarão vazios:
É apenas um exemplo genérico, se você quiser um específico, adicione suas estruturas de tabelas em sua pergunta.
máx.
Edite a pergunta "Em que ponto seria uma boa ideia fazer outra coisa?": A instrução INSERT SELECT bloqueia (bloqueio de gravação) sua tabela para impor consistência de dados durante a operação. Não consigo responder a pergunta "em que ponto" depende do seu servidor, configurações ... Mas imagine que você tenha uma tabela com 1 milhão de linhas, a operação pode levar alguns segundos, digamos 4 segundos, por exemplo, portanto, por 4 segundos, seus usuários não escreverão em sua tabela.