Criando uma tabela com base em outra já existente

Começo este post lhe questionando:

De que forma eu posso duplicar uma tabela, estrutura e dados?

Sei que devem haver várias formas e, hoje vou apresentar aos colegas duas, uma que copia estrutura e dados e outra somente a estrutura.

O primeiro exemplo será para uma criação de uma nova tabela, duplicando a estrutura e dados.

1º – Digamos que preciso duplicar minha tabela aniversariantes, que possui a seguinte estrutura:

Show Create Table paposql.aniversariantes 
 CREATE TABLE `aniversariantes` (  
  `id_aniversariante` bigint(20) DEFAULT NULL,  
  `nome` varchar(50) DEFAULT NULL,  
  `dt_nascimento` date DEFAULT NULL,  
  KEY `idx_dt_nascimento` (`dt_nascimento`)  
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8  

2º – Na tabela, possuímos os dados:

Select * From paposql.aniversariantes 
 1     Aniversariante 1     2012-01-01  
 2     Aniversariante 2     2012-02-01  
 3     Aniversariante 3     2012-03-01  
 5     Aniversariante 5     2012-05-01  
 6     Aniversariante 6     2012-06-01  
 7     Aniversariante 7     2012-07-01  
 8     Aniversariante 8     2012-08-01  
 9     Aniversariante 9     2012-09-01  
 10     Aniversariante 10     2012-10-01  
 11     Aniversariante 11     2012-11-01  
 12     Aniversariante 12     2012-12-01  

3º – Voltando ao início do post, como fazer duplicar esta tabela? Simples, vejamos:

 Create Table paposql.aniversariantes_copia  
 Select * From paposql.aniversariantes  


4º – Pronto, minha tabela aniversariantes foi duplicada com sucesso, vejamos a estrura:

 CREATE TABLE `aniversariantes_copia` (  
  `id_aniversariante` bigint(20) DEFAULT NULL,  
  `nome` varchar(50) DEFAULT NULL  
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8  

5º – Os dados:

Select * From paposql.aniversariantes_copia 
 1     Aniversariante 1     2012-01-01  
 2     Aniversariante 2     2012-02-01  
 3     Aniversariante 3     2012-03-01  
 5     Aniversariante 5     2012-05-01  
 6     Aniversariante 6     2012-06-01  
 7     Aniversariante 7     2012-07-01  
 8     Aniversariante 8     2012-08-01  
 9     Aniversariante 9     2012-09-01  
 10     Aniversariante 10     2012-10-01  
 11     Aniversariante 11     2012-11-01  
 12     Aniversariante 12     2012-12-01  

Na instrução uso normalmente o comando Create Table, onde especifico que as colunas deverão ser baseados na tabela aniversariantes já existe, mas, caso eu queria duplicar com apenas os campos id_aniversariante e nome eu também posso fazer a seguinte instrução:

 Create Table paposql.aniversariantes_copia  
 Select id_aniversariante, nome From paposql.aniversariantes  

Feito, realizamos a duplicação da tabela de forma rápida e fácil, mas, você deve ter observado que tivemos um pequeno probleminha nesta operação, certo?

Quando criamos a tabela aniversariantes_copia podemos ver que o índice existente na tabela original não foi criado, para isto vamos agora aprender a utilizar a segunda forma de duplicação citada no início do post.

6º – Novamente vamos ver a estrutura da tabela aniversariantes:

Show Create Table paposql.aniversariantes_copia2  
 CREATE TABLE `aniversariantes` (  
  `id_aniversariante` bigint(20) DEFAULT NULL,  
  `nome` varchar(50) DEFAULT NULL,  
  `dt_nascimento` date DEFAULT NULL,  
  KEY `idx_dt_nascimento` (`dt_nascimento`)  
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8  

7º – Agora vamos duplicar novamente a tabela só que desta vez somente a estrutura, e completa:

 Create Table paposql.aniversariantes_copia2   
    Like paposql.aniversariantes  

Feito, estrutura duplicada, vamos checar o resultado?

Show Create Table paposql.aniversariantes_copia2 
 CREATE TABLE `aniversariantes_copia2` (  
  `id_aniversariante` bigint(20) DEFAULT NULL,  
  `nome` varchar(50) DEFAULT NULL,  
  `dt_nascimento` date DEFAULT NULL,  
  KEY `idx_dt_nascimento` (`dt_nascimento`)  
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8  

Alerto aos colegas somente sobre a necessidade de renomear o índice, evitando assim a existência de um índice duplicado.

Bom pessoal, espero que as dicas tenham sido mais uma vez úteis e, sugestões, críticas ou elogios serão bem vindos.

Grande abraço.

2 comentários em “Criando uma tabela com base em outra já existente”

Deixe um comentário