Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the breadcrumb-navxt domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/devtools/public_html/blog/wp-includes/functions.php on line 6131

Deprecated: A função WP_Dependencies->add_data() foi chamada com um argumento que está obsoleto desde a versão 6.9.0! Os comentários condicionais do IE são ignorados por todos os navegadores compatíveis. in /home/devtools/public_html/blog/wp-includes/functions.php on line 6131
Criando uma tabela com base em outra já existente

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