Mysql – Crear una tabla a partir de un Select

En Mysql es posible crear una tabla a partir del resultado de una sentencia Select.  Permitiéndonos con ello no solo generar una tabla con la definición de campos del Select sino además, conteniendo las filas resultantes de la sentencia Select.

¿Cómo se hace?. Es muy sencillo tal y como lo indica la documentación aquí, la sintaxis para esta tarea es la siguiente:

CREATE TABLE new_tbl SELECT * FROM orig_tbl;

Con ello, haremos una prueba con la tabla Países tratada en artículos anteriores:  Supongamos que deseamos generar una tabla a modo de respaldo de países.  Para ello ejecutaríamos la siguiente sentencia.

CREATE TABLE COPIAPAISES SELECT ID, PAIS FROM PAISES

Como podemos ver en la siguiente imagen, Mysql ha creado una copia de la tabla Países a partir de la definición de campos incluidos en el Select:

paisescopia

Si generamos la sentencia DDL de la tabla, encontraremos lo siguiente:

CREATE TABLE `copiapaises` (
  `ID` int(3) unsigned NOT NULL default '0',
  `PAIS` varchar(30) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

es importante mencionar que Mysql creará la tabla usando el Engine configurado por defecto que en la mayoría de las instalaciones resulta ser InnoDb, por lo que es sumamente importante que si deseas generar la tabla con un Engine distinto lo especifiques desde la misma sentencia. Un ejemplo de ello sería:

CREATE TABLE COPIAPAISESMYISAM engine MyISAM SELECT ID, PAIS FROM PAISES

Lo anterior nos genera una tabla con la siguiente definición:

DROP TABLE IF EXISTS pruebas.copiapaisesmyisam;
CREATE TABLE `copiapaisesmyisam` (
  `ID` int(3) unsigned NOT NULL default '0',
  `PAIS` varchar(30) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Como se puede apreciar, es posible definir el Engine a usar al crear la tabla y no solo eso, es posible además redefinir los tipos de campos a crear en la tabla.

 

4 Comments

  1. Hola, ayúdame con una aclaración, para usar las tablas de MySQL con DBX y Datasnap es necesario que los nombres de las tablas estén en minúscula ?

    Las usaba p.ej. ‘PedidosPDT’ y me produjeron errores en las sentencias de actualización que desde los clientes (ClientDataSet) hace DBX hacia Datasnap … por eso tuve que dejarlas todas en minúscula.

    Gracias !

    • Saludos Gustavo.

      Puede ser que tu problema esté relacionado a cómo se maneja MySQl en Linux. Resulta que en linux, Mysql es sensible a minúsculas y mayúsculas cuando de nombres de tabla y nombre de base de datos se trata. ¿En qué sistema operativo tienes instalado tu servidor mysql?

      • Hola, que pena no haberte respondido antes pero creí que me llegaría un correo si había algún comentario, en fin, a lo importante …

        Tienes razón, mi BD está en un servidor Linux, pero el hecho es que todo lo que tenía mayúsculas tuve que pasarlo a minúsculas, caso contrario me producía un error, eso querría decir y por ello la pregunta inicial, que solo admite minúsculas en los nombres de las tablas en esos casos ?

  2. Así es Gustavo, No me considero Experto en DataSnap pero tratándose de mysql en Linux el comportamiento del servidor es precisamente ese.

    saludos. y revisaré por qué no avisa de mensajes nuevos… Saludos.

3 Trackbacks / Pingbacks

  1. » Generar un archivo CSV desde Mysql usando el Storage Engine CSV
  2. PostgreSQL – Crear tabla desde un Select | Blog del Poli
  3. SQL Server – Crear Tabla desde un Select | Blog del Poli

Deja un comentario