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.
Olá Roger, na versão do MySQL que estou usando (5.1 e 5.5), com ou sem o alias funcionou, qual a versão que esta usando? Deu algum erro?
Abraços e obrigado pelo feedback.
Este comentário foi removido pelo autor.