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 originalmysql> 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