MySQLi - Clonar tablas

Puede haber una situación en la que necesite una copia exacta de una tabla y CREAR TABLA ... SELECCIONAR no se adapte a sus propósitos porque la copia debe incluir los mismos índices, valores predeterminados, etc.

Puede manejar esta situación siguiendo los pasos:

  • Use SHOW CREATE TABLE para obtener una declaración CREATE TABLE que especifique la estructura de la tabla fuente, los índices y todo.

  • Modifique la declaración para cambiar el nombre de la tabla por el de la tabla de clonación y ejecute la declaración. De esta manera, tendrá una tabla de clonación exacta.

  • Opcionalmente, si también necesita copiar el contenido de la tabla, emita también una instrucción INSERT INTO ... SELECT.

Ejemplo

Pruebe el siguiente ejemplo para crear una tabla de clonación para tutorials_inf.

Paso 1

Obtenga una estructura completa sobre la mesa.

mysql> SHOW CREATE TABLE tutorials_inf \G;
*************************** 1. row ***************************
       Table: tutorials_inf
Create Table: CREATE TABLE `tutorials_inf` (
   `id` int(11) NOT NULL,
   `name` varchar(20) NOT NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `AUTHOR_INDEX` (`name`),
   UNIQUE KEY `NAME_INDEX` (`name`),
   KEY `id` (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = latin1
1 row in set (0.05 sec)

ERROR: No query specified

Paso 2

Cambie el nombre de esta tabla y cree otra tabla.

mysql> CREATE TABLE tutorials_clone(
   -> id int(11) NOT NULL,
   -> name varchar(20) NOT NULL,
   -> PRIMARY KEY (id),
   > UNIQUE KEY AUTHOR_INDEX (name),
   -> UNIQUE KEY NAME_INDEX (name),
   ->  KEY id (id));
Query OK, 0 rows affected (1.80 sec)

Paso 3

Después de ejecutar el paso 2, creará una tabla de clonación en su base de datos. Si desea copiar datos de la tabla anterior, puede hacerlo mediante la instrucción INSERT INTO ... SELECT.

mysql> INSERT INTO tutorials_clone(id,name) SELECT id,name from tutorials_inf;
Query OK, 4 rows affected (0.19 sec)
Records: 4  Duplicates: 0  Warnings: 0

Finalmente, tendrá la tabla de clonación exacta que deseaba tener.