capa do tutorial MySQL

Como clonar uma tabela no MySQL

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.
Capa do tutorial MySQL - clonar tabelas
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. 😉

Publicado por

Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia. Fã de séries, como "Rick and Morty" e "BoJack Horseman". Me siga no Twitter e vamos trocar ideias!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *