Creando y poblando tablas a partir de tablas ya existentes en MySQL

Algunas veces en MySQL necesitamos crear una copia completa de alguna tabla o sólo copiar la estructura. Aquí muestro algunos ejemplos con sus respectivas diferencias.

Primero vamos a crear una pequeña tabla para los ejemplos. Crearemos la tabla contactos con los campos mínimos.
CREATE TABLE `contactos` 
( 
`id` INT NOT NULL AUTO_INCREMENT , 
`nombre` VARCHAR(250) NOT NULL , 
`telefono` INT NOT NULL , PRIMARY KEY (`id`)
) ENGINE = InnoDB;

Y la poblamos con algunos datos.
INSERT INTO contactos (nombre, telefono) VALUES
('Luis Enrique', 66775511),
('Jimi Hendrix', 27272727),
('Cintia Guzman', 44774477); 

Ya tenemos lista nuestra tabla.
mysql> select * from contactos;
+----+----------------+----------+
| id | nombre         | telefono |
+----+----------------+----------+
|  1 | Luis Enrique   | 66775511 |
|  2 | Jimi Hendrix   | 27272727 |
|  3 | Cintia Guzman  | 44774477 |
+----+----------------+----------+

Ahora podemos continuar con los ejemplos.

CREATE TABLE tabla_destino AS SELECT * FROM tabla_origen;

Crea estructura a partir de la tabla original e inserta los datos de acuerdo a los criterios del SELECT.
mysql> CREATE TABLE tabla_1 AS SELECT * FROM contactos;
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM tabla_1;
+----+----------------+----------+
| id | nombre         | telefono |
+----+----------------+----------+
|  1 | Luis Enrique   | 66775511 |
|  2 | Jimi Hendrix   | 27272727 |
|  3 | Cintia Guzman  | 44774477 |
+----+----------------+----------+


CREATE TABLE tabla_destino LIKE tabla_origen;

Crea sólo la estructura a partir de la tabla original
mysql> CREATE TABLE tabla_2 LIKE contactos;
Query OK, 0 rows affected (0.02 sec)

mysql> DESCRIBE tabla_2;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| nombre   | varchar(250) | NO   |     | NULL    |                |
| telefono | int(11)      | NO   |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)


INSERT INTO tabla_destino SELECT * FROM tabla_origen;

Inserta en la tabla destino los datos de la tabla origen, siempre y cuando conicidan los campos de las dos tablas y no importando si la tabla destino está vacía o poblada previamente.
mysql> INSERT INTO tabla_2 SELECT * FROM contactos;
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM tabla_2;
+----+----------------+----------+
| id | nombre         | telefono |
+----+----------------+----------+
|  1 | Luis Enrique   | 66775511 |
|  2 | Jimi Hendrix   | 27272727 |
|  3 | Cintia Guzman  | 44774477 |
+----+----------------+----------+
3 rows in set (0.00 sec)

Estos ejemplos han fueron probados en MySQL 5.7.30. No deberían tener problema en versiones posteriores.

Saludos y esperando sean de utilidad.

Comentarios

Entradas populares de este blog

Crear un proyecto web con Spring Boot y JSP

Adiós Google Play Music