Clonar uma tabela, no MySQL, é a solução mais adequada quando você precisa de uma cópia exata da estrutura e o CREATE TABLE… SELECT não atende aos seus propósitos — por que você precisa que a cópia venha com os mesmos índices, os mesmos valores padrão etc.
A solução para obter uma declaração CREATE TABLE adequada é usar SHOW CREATE TABLE nome_da_tabela
.
Com esta declaração, o sistema irá mostrar como proceder para criar a sua tabela clone.
Deixe o exemplo falar por si:
SHOW CREATE TABLE ClientesCidades\G
O comando, acima, pede ao servidor MySQL mostrar qual declaração deve ser usada para criar uma tabela idêntica à ClientesCidades.
Veja o meu resultado:
*************************** 1. row *************************** Table: ClientesCidades Create Table: CREATE TABLE `ClientesCidades` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `NomeCliente` varchar(255) DEFAULT NULL, `IdadeCliente` mediumint(9) DEFAULT NULL, `CidadeCliente` varchar(255) DEFAULT NULL, `CredCliente` mediumint(9) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=201 DEFAULT CHARSET=latin1 1 row in set (0.00 sec)
De tudo isto, você precisa apenas desta parte:
CREATE TABLE `ClientesCidades_clone` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `NomeCliente` varchar(255) DEFAULT NULL, `IdadeCliente` mediumint(9) DEFAULT NULL, `CidadeCliente` varchar(255) DEFAULT NULL, `CredCliente` mediumint(9) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=201 DEFAULT CHARSET=latin1;
Note que troquei o nome da tabela de ClientesCidades para ClientesCidades_clone.
Use o SHOW TABLES para conferir a criação da tabela:
SHOW TABLES;
+-----------------------+ | Tables_in_tutorial | +-----------------------+ | CadCli | | CliCred | | ClientesCidades | | ClientesCidades_clone | +-----------------------+ 4 rows in set (0.00 sec)
Use o comando EXPLAIN para comparar as estruturas
Você pode usar o comando EXPLAIN para comparar as estruturas das 2 tabelas.
EXPLAIN ClientesCidades;
+---------------+-----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------+-----------------------+------+-----+---------+----------------+ | id | mediumint(8) unsigned | NO | PRI | NULL | auto_increment | | NomeCliente | varchar(255) | YES | | NULL | | | IdadeCliente | mediumint(9) | YES | | NULL | | | CidadeCliente | varchar(255) | YES | | NULL | | | CredCliente | mediumint(9) | YES | | NULL | | +---------------+-----------------------+------+-----+---------+----------------+ 5 rows in set (0.00 sec)
Segue a estrutura da tabela clone:
EXPLAIN ClientesCidades_clone;
+---------------+-----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------+-----------------------+------+-----+---------+----------------+ | id | mediumint(8) unsigned | NO | PRI | NULL | auto_increment | | NomeCliente | varchar(255) | YES | | NULL | | | IdadeCliente | mediumint(9) | YES | | NULL | | | CidadeCliente | varchar(255) | YES | | NULL | | | CredCliente | mediumint(9) | YES | | NULL | | +---------------+-----------------------+------+-----+---------+----------------+ 5 rows in set (0.00 sec)
Note que a segunda tabela foi clonada apenas na estrutura. Ela foi criada vazia, portanto — e como povoar uma tabela é assunto para outro tutorial. 😉