CREATE [TEMPORARY] TABLE [IF NOT EXISTS]tbl_name[(create_definition,...)] [table_options] [select_statement]
O:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS]tbl_name[(] LIKEold_tbl_name[)];create_definition:column_definition| [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...) | KEY [index_name] [index_type] (index_col_name,...) | INDEX [index_name] [index_type] (index_col_name,...) | [CONSTRAINT [symbol]] UNIQUE [INDEX] [index_name] [index_type] (index_col_name,...) | [FULLTEXT|SPATIAL] [INDEX] [index_name] (index_col_name,...) | [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) [reference_definition] | CHECK (expr)column_definition:col_nametype[NOT NULL | NULL] [DEFAULTdefault_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string'] [reference_definition]type: TINYINT[(length)] [UNSIGNED] [ZEROFILL] | SMALLINT[(length)] [UNSIGNED] [ZEROFILL] | MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL] | INT[(length)] [UNSIGNED] [ZEROFILL] | INTEGER[(length)] [UNSIGNED] [ZEROFILL] | BIGINT[(length)] [UNSIGNED] [ZEROFILL] | REAL[(length,decimals)] [UNSIGNED] [ZEROFILL] | DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL] | FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL] | DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL] | NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL] | DATE | TIME | TIMESTAMP | DATETIME | CHAR(length) [BINARY | ASCII | UNICODE] | VARCHAR(length) [BINARY] | TINYBLOB | BLOB | MEDIUMBLOB | LONGBLOB | TINYTEXT [BINARY] | TEXT [BINARY] | MEDIUMTEXT [BINARY] | LONGTEXT [BINARY] | ENUM(value1,value2,value3,...) | SET(value1,value2,value3,...) |spatial_typeindex_col_name:col_name[(length)] [ASC | DESC]reference_definition: REFERENCEStbl_name[(index_col_name,...)] [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE] [ON DELETEreference_option] [ON UPDATEreference_option]reference_option: RESTRICT | CASCADE | SET NULL | NO ACTIONtable_options:table_option[table_option] ...table_option: {ENGINE|TYPE} =engine_name| AUTO_INCREMENT =value| AVG_ROW_LENGTH =value| [DEFAULT] CHARACTER SETcharset_name[COLLATEcollation_name] | CHECKSUM = {0 | 1} | COMMENT = 'string' | MAX_ROWS =value| MIN_ROWS =value| PACK_KEYS = {0 | 1 | DEFAULT} | PASSWORD = 'string' | DELAY_KEY_WRITE = {0 | 1} | ROW_FORMAT = {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT} | RAID_TYPE = { 1 | STRIPED | RAID0 } RAID_CHUNKS =valueRAID_CHUNKSIZE =value| UNION = (tbl_name[,tbl_name]...) | INSERT_METHOD = { NO | FIRST | LAST } | DATA DIRECTORY = 'absolute path to directory' | INDEX DIRECTORY = 'absolute path to directory'select_statement:[IGNORE | REPLACE] [AS] SELECT ... (Some legal select statement)
        CREATE TABLE crea una tabla con el nombre
        dado. Debe tener el permiso CREATE para la
        tabla.
      
Las reglas para nombres de tabla permitidos se dan en Sección 9.2, “Nombres de bases de datos, tablas, índices, columnas y alias”. Por defecto, la tabla se crea en la base de datos actual. Ocurre un error si la tabla existe, si no hay base de datos actual o si la base de datos no existe.
        En MySQL 5.0, el nombre de tabla puede especificarse como
        db_name.tbl_name para crear la tabla
        en la base de datos específica. Esto funciona haya una base de
        datos actual o no. Si usa identificadores entre comillas,
        entrecomille el nombre de base de datos y de tabla por separado.
        Por ejemplo, `mydb`.`mytbl` es legal, pero
        `mydb.mytbl` no.
      
        Puede usar la palabra TEMPORARY al crear una
        tabla. Una tabla TEMPORARY es visible sólo
        para la conexión actual, y se borra automáticamente cuando la
        conexión se cierra. Esto significa que dos conexiones distintas
        pueden usar el mismo nombre de tabla temporal sin entrar en
        conflicto entre ellas ni con tablas no
        TEMPORARY con el mismo nombre. (La tabla
        existente se oculta hasta que se borra la tabla temporal.) En
        MySQL 5.0, debe tener el permiso CREATE TEMPORARY
        TABLES para crear tablas temporales.
      
        MySQL 5.0 soporta las palabras IF NOT EXISTS
        para que no ocurra un error si la tabla existe. Tenga en cuenta
        que no hay verificación que la tabla existente tenga una
        estructura idéntica a la indicada por el comando
        CREATE TABLE . Nota: Si
        usa IF NOT EXISTS en un comando
        CREATE TABLE ... SELECT ,cualquier registro
        seleccionado por la parte SELECT se inserta
        si la tabla existe o no.
      
        MySQL representa cada tabla mediante un fichero
        .frm de formato de tabla (definición) en
        el directorio de base de datos. El motor para la tabla puede
        crear otros ficheros también. En el caso de tablas
        MyISAM , el motor crea ficheros índice y de
        datos. Por lo tanto, para cada tabla MyISAM
        tbl_name, hay tres ficheros de disco:
      
| Fichero | Propósito | 
|  | Fichero de formato de tabla (definición) | 
|  | Fichero de datos | 
|  | Fichero índice | 
Los ficheros creados por cada motor de almacenamiento para representar tablas se describen en Capítulo 14, Motores de almacenamiento de MySQL y tipos de tablas.
Para información general de las propiedades de los diversos tipos de columna, consulte Capítulo 11, Tipos de columna. Para información acerca de tipos de columna espaciales, consulte Capítulo 18, Extensiones espaciales de MySQL.
            Si no se especifica NULL ni NOT
            NULL, la columna se trata como si se especificara
            NULL .
          
            Una columna entera puede tener el atributo adicional
            AUTO_INCREMENT. Cuando inserta un valor
            de NULL (recomendado) o
            0 en una columna
            AUTO_INCREMENT autoindexada, la columna
            se asigna al siguiente valor de secuencia. Típicamente esto
            es value+1value es el mayor valor
            posible para la columna en la tabla. Secuencias
            AUTO_INCREMENT comienzan con
            1. Tales columnas deben definirse como
            uno de los tipos enteros como se describe en
            Sección 11.1.1, “Panorámica de tipos numéricos”. (El valor 1.0
            no es un entero.) Consulte
            Sección 24.2.3.34, “mysql_insert_id()”.
          
            En MySQL 5.0, especificar
            NO_AUTO_VALUE_ON_ZERO para la opción de
            servidor --sql-mode o la variable de
            sistema sql_mode le permite almacenar
            0 en columnas
            AUTO_INCREMENT como 0
            sin generar un nuevo valor de secuencia. Consulte
            Sección 5.3.1, “Opciones del comando mysqld”.
          
            Nota: Sólo puede haber una
            columna AUTO_INCREMENT por tabla, debe
            estar indexada, y no puede tener un valor
            DEFAULT . Una columna
            AUTO_INCREMENT funciona correctamente
            sólo si contiene sólo valores positivos. Insertar un
            número negativo se trata como insertar un número positivo
            muy grande. Esto se hace para evitar problemas de precisión
            cuando los números “cambian” de positivos a
            negativos y asegura que no obtiene accidentalmente una
            columna AUTO_INCREMENT que contenga
            0.
          
            Para tablas MyISAM y
            BDB , puede especificar una columna
            AUTO_INCREMENT secundaria en una clave de
            múltiples columnas. Consulte
            Sección 3.6.9, “Utilización de AUTO_INCREMENT”.
          
            Para hacer MySQL compatible con otras aplicaciones ODBC ,
            puede encontrar el valor AUTO_INCREMENT
            para el último registro insertado con la siguiente
            consulta:
          
SELECT * FROMtbl_nameWHEREauto_colIS NULL
            En MySQL 5.0, las definiciones de columnas de caracteres
            puede incluir un atributo CHARACTER SET
            para especificar el conjunto de caracteres y, opcionalmente,
            una colación para la columna. Para detalles, consulte
            Capítulo 10, Soporte de conjuntos de caracteres. CHARSET es
            sinónimo de CHARACTER SET.
          
CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
MySQL 5.0 interpreta las especificaciones de longitud en definiciones de columna en caracteres. (Algunas versiones anteriores los interpretan en bytes.)
            La cláusula DEFAULT especifica el valor
            por defecto para una columna. Con una excepción, el valor
            por defecto debe ser constante; no puede ser una función o
            una expresión. Esto significa , por ejemplo, que no puede
            poner como valor por defecto de una columna el valor de una
            función como NOW() o
            CURRENT_DATE. La excepción es que pude
            especificar CURRENT_TIMESTAMP como
            defecto para columnas TIMESTAMP .
            Consulte Sección 11.3.1.1, “Propiedades de TIMESTAMP desde MySQL 4.1”.
          
            Antes de MySQL 5.0.2, si una definición de columna no
            incluye valor DEFAULT explícito, MySQL
            determina el valor por defecto como sigue:
          
            Si la columna puede tener valores NULL ,
            la columna se define como una cláusula DEFAULT
            NULL explícita.
          
            Si la columna no puede tener valores NULL
            , MySQL define la columna con una cláusula
            DEFAULT explícita, usando el valor por
            defecto implícito para el tipo de datos de la columna . Los
            valores por defecto implícitos se definen como sigue:
          
                Para tipos numéricos distintos a los declarados con el
                atributo AUTO_INCREMENT , por defecto
                es 0. Para una columna
                AUTO_INCREMENT , el valor por defecto
                es el siguiente valor de la secuencia.
              
                Para tipos de fecha y hora distintos a
                TIMESTAMP, el valor por defecto es el
                valor “cero” apropiado para el tipo. Para
                la primera columna TIMESTAMP en una
                tabla, el valor por defecto es la fecha actual y la
                hora. Consulte Sección 11.3, “Tipos de fecha y hora”.
              
                Para tipos de cadenas distintos a
                ENUM, el valor por defecto es la
                cadena vacía. Para ENUM, el valor
                por defecto es el primer valor de la enumeración.
              
            Las columnas BLOB y
            TEXT no pueden tener un valor por
            defecto.
          
            Desde MySQL 5.0.2, si una definición de columna no incluye
            valor DEFAULT explícito , MySQL
            determina el valor por defecto como sigue:
          
            Si la columna puede tener NULL como
            valor, la columna se define con una cláusula
            DEFAULT NULL explícita. Esto es lo mismo
            que antes de 5.0.2.
          
            Si la columna no puede tener valores NULL
            , MySQL define la columna sin cláusula
            DEFAULT explícita. Para entradas de
            datos, si un comando INSERT o
            REPLACE no incluye valor para la columna,
            MySQL trata la columna según el modo SQL activo en ese
            momento:
          
Si el modo estricto no está activado, MySQL pone en la columna el valor por defecto implícito para el tipo de datos de la columna.
Si está activo el modo estricto, ocurre un error para tablas transaccionales y el comando se deshace. Para tablas no transaccionales, ocurre un error, pero si esto ocurre para el segundo registro o siguientes de un comando de múltiples registros, los registros precedentes se insertarán.
            Suponga que una tabla t se define como
            sigue:
          
CREATE TABLE t (i INT NOT NULL);
            En este caso, i no tiene valor
            explícito, así que en modo estricto todos los siguientes
            comandos producen un error en modo estricto y no se inserta
            ningún registro. Para modo no estricto, sólo el tercer
            comando produce un error; el valor implícito por defecto se
            inserta para las dos primeras, pero la tercera falla ya que
            DEFAULT(i) no puede producir un valor:
          
INSERT INTO t VALUES(); INSERT INTO t VALUES(DEFAULT); INSERT INTO t VALUES(DEFAULT(i));
Consulte Sección 5.3.2, “El modo SQL del servidor”.
            Para una tabla dada, puede usar el comando SHOW
            CREATE TABLE para ver qué columnas puede tener
            una cláusula explícita DEFAULT.
          
            Un comentario para una columna puede especificarse en MySQL
            5.0 con la opción COMMENT . El
            comentario se muestra con los comandos SHOW CREATE
            TABLE y SHOW FULL COLUMNS .
          
            En MySQL 5.0, el atributo SERIAL puede
            usarse como un alias para BIGINT UNSIGNED NOT NULL
            AUTO_INCREMENT UNIQUE.
          
            KEY normalemente es sinónimo para
            INDEX. En MySQL 5.0, el atributo clave
            PRIMARY KEY puede especificarse como
            KEY cuando se da en una definición de
            columna. Esto se implementó por compatibilidad con otros
            sistemas de bases de datos.
          
            En MySQL, un índice UNIQUE es uno en que
            todos los valores en el índice deben ser distintos. Ocurre
            un error si intenta añadir un nuevo registro con una clave
            que coincida con un registro existente. La excepción es que
            una columna en el índice puede contener valores
            NULL , puede contener valores
            NULL múltiples. Esta excepción no se
            aplica a tablas BDB , en las que una
            columna indexada le permita un único
            NULL.
          
            Una PRIMARY KEY es una
            KEY única donde todas las columnas de la
            clave deben definirse como NOT NULL. Si
            no se declaran explícitamente como NOT
            NULL, MySQL las declara implícitamente ( y sin
            decirlo ) . Una tabla puede tener sólo una PRIMARY
            KEY. Si no tiene una PRIMARY
            KEY y una aplicación pide una PRIMARY
            KEY en sus tablas, MySQL retorna el primer índice
            UNIQUE que no tenga columnas
            NULL como la PRIMARY
            KEY.
          
            En la tabla creada, una PRIMARY KEY se
            guarda en primer lugar, seguida por todos los índices
            UNIQUE, y luego los índices no únicos.
            Esto ayuda al optimizador MySQL a priorizar qué indice usar
            y también detectar más rápido claves
            UNIQUE duplicadas.
          
            Una PRIMARY KEY puede ser un índice de
            múltiples columnas. Sin embargo, no puede crear un índice
            de múltiples columnas usando el atributo de clave
            PRIMARY KEY en una especificación de
            columna. Hacerlo sólo marca la columna como primaria. Debe
            usar una cláusula PRIMARY KEY(index_col_name,
            ...) separada.
          
            Si un índice PRIMARY KEY o
            UNIQUE consite sólo de una columna que
            tenga un tipo entero, puede referirse a la columna como
            _rowid en comandos
            SELECT.
          
            En MySQL, el nombre de una PRIMARY KEY es
            PRIMARY. Para otros índices, si no
            asigna un nombre, el índice tieen el mismo nombre que la
            primera columna indexada, con un sufijo opcional
            (_2, _3,
            ...) para hacerlo único. Puede ver los
            nombres de índice para una tabla usando SHOW INDEX
            FROM . Consulte
            Sección 13.5.4.11, “Sintaxis de tbl_nameSHOW INDEX”.
          
            A partir de MySQL 5.0, algunos motores de almacenamiento le
            permiten especificar un tipo de índice al crear el índice.
            Consulte Sección 13.1.4, “Sintaxis de CREATE INDEX”.
          
Para más información acerca de cómo usa los índices MySQL, consulte Sección 7.4.5, “Cómo utiliza MySQL los índices”.
            En MySQL 5.0, sólo los motores MyISAM,
            InnoDB, BDB, y
            MEMORY soporta índices en columnas que
            pueden tener valores NULL . En otros
            casos, debe declarar columnas indexadas como NOT
            NULL u ocurre un error.
          
            Con sintaxis
            col_name(length)length
            caracteres de una columna CHAR o
            VARCHAR . Indexar sólo un prefijo de
            valores de columna como este puede hacer el fichero de
            índice mucho más pequeño. Consulte
            Sección 7.4.3, “Índices de columna”.
          
            En MySQL 5.0, los motores MyISAM y
            InnoDB soportan indexación en columnas
            BLOB y TEXT . Al
            indexar columnas BLOB o
            TEXT debe
            especificar una longitud de prefijo para el índice. Por
            ejemplo:
          
CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));
            En MySQL 5.0, los prefijos pueden tener hasta 1000 bytes de
            longitud para tablas MyISAM y
            InnoDB y 255 bytes para otros tipos de
            tabla. Tenga en cuenta que los límites de prefijo se miden
            en bytes, mientras que la longitud de prefijo en comandos
            CREATE TABLE se interpretan como el
            número de caracteres. Asegúrese de tener esto en cuenta al
            especificar una longitud de prefijo para una columna que use
            un conjunto de caracteres multi-byte .
          
            Una especificación
            index_col_name puede acabar con
            ASC o DESC. Estas
            palabras clave se permiten para extensiones futuras para
            especificar almacenamiento de índices ascendente o
            descendentemente. Actualmente se parsean pero se ignoran;
            los valores de índice siempre se almacenan en orden
            ascendente.
          
            Cuando usa ORDER BY o GROUP
            BY en una columna TEXT o
            BLOB en un SELECT, el
            servidor ordena los valores usando sólo el número inicial
            de bytes indicados por la variable de sistema
            max_sort_length . Consulte
            Sección 11.4.3, “Los tipos BLOB y TEXT”.
          
            En MySQL 5.0, puede crear índices especiales
            FULLTEXT , que se usan para índices
            full-text . Sólo las tablas MyISAM
            soportan índices FULLTEXT . Pueden
            crearse sólo desde columnas CHAR,
            VARCHAR, y TEXT. La
            indexación siempre se hace sobre la columna entera; la
            indexación parcial no se soporta y cualquier longitud de
            prefijo se ignora. Consulte
            Sección 12.7, “Funciones de búsqueda de texto completo (Full-Text)” para más detalles.
          
            En MySQL 5.0, puede crear índices
            SPATIAL en tipos de columna espaciales.
            Los tipos espaciales se soportan sólo para tablas
            MyISAM y las columnas indexadas deben
            declararase como NOT NULL. Consulte
            Capítulo 18, Extensiones espaciales de MySQL.
          
            En MySQL 5.0, las tablas InnoDB soportan
            el chequeo de restricciones de claves foráneas . Consulte
            Capítulo 15, El motor de almacenamiento InnoDB. Tenga en cuenta que la sintaxis
            FOREIGN KEY en InnoDB
            es más restrictiva que la sintaxis presentada para el
            comando CREATE TABLE al inicio de esta
            sección: las columnas en la tabla referenciada debe siempre
            nombrarse explícitamente. InnoDB soporta
            tanto acciones ON DELETE como ON
            UPDATE en MySQL 5.0. Para la sintaxis precisa,
            consulte Sección 15.6.4, “Restricciones (constraints) FOREIGN KEY”.
          
            Para otros motores de almacenamiento, MySQL Server parsea la
            sintaxis FOREIGN KEY y
            REFERENCES en comandos CREATE
            TABLE , pero no hace nada. La cláusula
            CHECK se parsea paro se ignora en todos
            los motores de almacenamiento. Consulte
            Sección 1.7.5.5, “Claves foráneas (foreign keys)”.
          
            Para tablas MyISAM cada columna
            NULL ocupa un bit extra, redondeado al
            byte más próximo. La máxima longitud de registro en bytes
            puede calcularse como sigue:
          
row length = 1
             + (sum of column lengths)
             + (number of NULL columns + delete_flag + 7)/8
             + (number of variable-length columns)
            delete_flag es 1 para tables con
            formato de registro estático. Las tablas estáticas usan un
            bit en el registro para un flag que indica si el registro se
            ha borrado. delete_flag es 0 para
            tablas dinámicas ya que el flag se almacena en una cabecera
            de registro dinámica.
          
            Estos cálculos no se aplican en tablas
            InnoDB , en las que el tamaño de
            almacenamiento no es distinto para columnas
            NULL y NOT NULL .
          
        La parte table_options de la sintaxis
        CREATE TABLE puede usarse desde MySQL 3.23.
      
        Las opciones ENGINE y TYPE
        especifican el motor de almacenamiento para la tabla.
        ENGINE es el nombre preferido para la opción
        en MySQL 5.0, y TYPE está obsoleto. El
        soporte para la palabra TYPE usada en este
        contexto desaparecerá en MySQL 5.1.
      
        Las opciones ENGINE y TYPE
        pueden tener los siguientes valores:
      
| Motor de almacenamiento | Descripción | 
| ARCHIVE | El motor de almacenamiento para archivar. Consulte
                Sección 14.7, “El motor de almacenamiento ARCHIVE”. | 
| BDB | Tablas transaccionales con bloqueo de página. Conocidas como BerkeleyDB. Consulte
                Sección 14.4, “El motor de almacenamientoBDB(BerkeleyDB)”. | 
| CSV | Tablas que almacenan registros en valores separados por comas. Consulte
                Sección 14.8, “El motor de almacenamiento CSV”. | 
| EXAMPLE | Motor de ejemplo. Consulte Sección 14.5, “El motor de almacenamiento EXAMPLE”. | 
| FEDERATED | Motor que accede a tablas remotas. Consulte
                Sección 14.6, “El motor de almacenamiento FEDERATED”. | 
| HEAP | Consulte Sección 14.3, “El motor de almacenamiento MEMORY(HEAP)”. | 
| (OBSOLETE) ISAM | No disponible en MySQL 5.0. Si está actualizando a MySQL 5.0 desde una
                versión prévia, debe convertir cualquier tabla ISAMexistente aMyISAMantes de
                la actualización. Consulte
                Capítulo 14, Motores de almacenamiento de MySQL y tipos de tablas. | 
| InnoDB | Tablas transaccionales con bloqueo de registro y claves foráneas.
                Consulte Capítulo 15, El motor de almacenamiento InnoDB. | 
| MEMORY | Los datos de este tipo de tabla se almacenan sólo en memoria. (Conocido
                anteriormente como HEAP.) | 
| MERGE | Colección de tablas MyISAMusadas como una sola
                tabla. También conocido comoMRG_MyISAM. Consulte
                Sección 14.2, “El motor de almacenamientoMERGE”. | 
| MyISAM | Motor binario portable que es el motor por defecto usado en MySQL.
                Consulte Sección 14.1, “El motor de almacenamiento MyISAM”. | 
| NDBCLUSTER | Clusterizado, tolerante a errores, tablas en memoria. También conocido
                como NDB. Consulte
                Capítulo 16, MySQL Cluster. | 
Para más información acerca de motores MySQL, consulte Capítulo 14, Motores de almacenamiento de MySQL y tipos de tablas.
        Si un motor no está disponible, MySQL usa en su lugar
        MyISAM . Por ejemplo, si una definición de
        tabla incluye la opción ENGINE=BDB pero el
        servidor MySQL no soporta tablas BDB , la
        tabla se crea como MyISAM . Esto hace posible
        tener un entorno de replicación donde tiene tablas
        transaccionales en el maestro pero tablas no transaccionales en
        el esclavo (para tener más velocidad). En MySQL 5.0, aparece
        una advertencia si la especificación del motor no es correcta.
      
Las otras opciones de tabla se usan para optimizar el comportamiento de la tabla. En la mayoría de casos, no tiene que especificar ninguna de ellas. La opción funciona para todos los motores a no ser que se indique lo contrario:
            AUTO_INCREMENT
          
            El valor inicial para AUTO_INCREMENT para
            la tabla. En MySQL 5.0, sólo funciona para tablas
            MyISAM y MEMORY.
            También se soporta para InnoDB desde
            MySQL 5.0.3. Para inicializar el primer valor de auto
            incremento para motores que no soporten esta opción,
            inserte un registro de prueba con un valor que sea uno menor
            al deseado tras crear la tabla, y luego borre este registro.
          
            Para motores que soportan la opción de tabla
            AUTO_INCREMENT en comandos
            CREATE TABLE puede usar ALTER
            TABLE  para resetear el
            valor tbl_name AUTO_INCREMENT =
            nAUTO_INCREMENT .
          
            AVG_ROW_LENGTH
          
Una aproximación de la longitud media de registro para su tabla. Necesita inicializarla sólo para tablas grandes con registros de longitud variable.
            Cuando crea una tabla MyISAM , MySQL usa
            el producto de las opciones MAX_ROWS y
            AVG_ROW_LENGTH para decidir el tamaño de
            la tabla resultante. Si no las especifica, el tamaño
            máximo para la tabla es 65,536TB de datos (4GB antes de
            MySQL 5.0.6). (Si su sistema operativo no soporta ficheros
            de este tamaño, los tamaños de fichero se restringen al
            límite del sistema operativo.) Si quiere mantener bajos los
            tamaños de los punteros para que el índice sea pequeño y
            rápido y no necesita realmente ficheros grandes, puede
            decrementar el tamaño de puntero por defecto mediante la
            variable de sistema
            myisam_data_pointer_size que se añadió
            en MySQL 4.1.2. (Consulte
            Sección 5.3.3, “Variables de sistema del servidor”.) Si quiere que
            todas sus tablas sean capaces de crecer por encima del
            límite por defecto y quiere mantener sus tablas ligeramente
            más lentas y más grandes de lo necesario, puede
            incrementar el tamaño de punter por defecto cambiando esta
            variable.
          
            [DEFAULT] CHARACTER SET
          
            Especifica el conjunto de caracteres para la tabla.
            CHARSET es un sinónimo.
          
            para CHARACTER SET.
          
            COLLATE
          
Especifica la colación por defecto de la tabla.
            CHECKSUM
          
            Póngalo a 1 si quiere que MySQL mantenga un checksum para
            todos los registros (un checksum que MySQL actualiza
            automáticamente según cambia la tabla). Esto hace que la
            tabla tenga actualizaciones más lentas, pero hace más
            fácil encontrar tablas corruptas. El comando
            CHECKSUM TABLE muestra el checksum (sólo
            para MyISAM).
          
            COMMENT
          
Un comentario para su tabla, hasta 60 caracteres.
            MAX_ROWS
          
Máximo número de registros que planea almacenar en la tabla. No es un límite absoluto, sino un indicador que la tabla debe ser capaz de almacenar al menos estos registros.
            MIN_ROWS
          
Mínimo número de registros que planea almacenar en la tabla.
            PACK_KEYS
          
            Ponga esta opción a 1 si quiere tener índices más
            pequeños. Esto hace normalmente que las actualizaciones
            sean más lentas y las lecturas más rápidas. Poner esta
            opción a 0 deshabilita la compresión de claves. Ponerla a
            DEFAULT le dice al motor que comprima
            sólo columnas
            CHAR/VARCHAR largas
            (MyISAM y ISAM sólo).
          
            Si no usa PACK_KEYS, por defecto se
            comprimen sólo cadenas, no números. Si usa
            PACK_KEYS=1, también se empaquetan
            números.
          
Al comprimir claves de números binarios, MySQL usa compresión de prefijo:
Cada clave necesita un byte extra para indicar cuántos bytes de la clave previa son los mismos para la siguiente clave.
El puntero al registro se almacena en orden de el-mayor-byte-primero directamente tras la clave, para mejorar la compresión.
            Esto significa que si tiene muchas claves iguales en dos
            registros consecutivos, todas las “mismas”
            claves siguientes usualmente sólo ocupan dos bytes
            (incluyendo el puntero al registro). Comparar esto con el
            caso ordinario donde las siguente claves ocupan
            storage_size_for_key + pointer_size
            (donde el tamaño del puntero es usualmente 4). Obtiene un
            gran beneficio a partir de la compresión de prefijos sñolo
            si tiene muchos números que sean el mismo. Si todas las
            claves son totalmente distintas, usa un byte más por clave,
            si la clave no es una clave que pueda tener valores
            NULL . (En ese caso, el tamaño
            empaquetado de la clave se almacena en el mismo byte que se
            usa para marcar si una clave es NULL.)
          
            PASSWORD
          
            Encripta el fichero .frm con una
            contraseña. Esta opción no hace nada en la versión
            estándar de MySQL.
          
            DELAY_KEY_WRITE
          
            Póngalo a 1 si quiere retardar actualizaciones de clave
            para la tabla hasta que la tabla se cierra (sólo en
            MyISAM).
          
            ROW_FORMAT
          
            Define cómo deben almacenarse los registros. Actualmente
            esta opción sólo funciona con tablas
            MyISAM. El valor de la opción puede ser
            FIXED o DYNAMIC para
            formato de longitud estática o variable.
            myisampack cambia el tipo a
            COMPRESSED. Consulte
            Sección 14.1.3, “Formatos de almacenamiento de tablas MyISAM”.
          
            Desde MySQL/InnoDB-5.0.3, los registros de InnoDB se
            almacenan de forma más compacta
            (ROW_FORMAT=COMPACT) por defecto. El
            antiguo formato puede usarse espeficicando
            ROW_FORMAT=REDUNDANT.
          
            Tenga en cuenta que el soporte para RAID
            se ha eliminado desde MySQL 5.0. Para información sobre
            RAID, consulte Manual de referencia de MySQL 4.1.
          
            UNION
          
            UNION se usa cuando quiere usar una
            colección de tablas idénticas como una. Funciona sólo con
            tablas MERGE . Consulte
            Sección 14.2, “El motor de almacenamiento MERGE”.
          
            En MySQL 5.0, debe tener permisos SELECT,
            UPDATE, y DELETE para
            las tablas mapeadas en una tabla MERGE .
            (Nota: Originalmente, todas las tablas
            usadas tenían que estar en la misma base de datos que la
            tabla MERGE. Esta restricción se ha
            eliminado.)
          
            INSERT_METHOD
          
            Si quiere insertar datos en una tabla
            MERGE debe especificarlo con
            INSERT_METHOD en la tabla en que se debe
            insertar el registro. INSERT_METHOD es
            una opción útil para tablas MERGE
            sólo. Use un valor dee FIRST o
            LAST para que las inserciones vayan a la
            primera o última tabla, o un valor de NO
            para evitar inserciones. Consulte
            Sección 14.2, “El motor de almacenamiento MERGE”.
          
            DATA DIRECTORY, INDEX
            DIRECTORY
          
            Usando DATA
            DIRECTORY=' o
            directory'INDEX
            DIRECTORY='
            puede especificar dónde debe el moto
            directory'MyISAM buardar un fichero de datos e
            índice de una tabla. Tenga en cuenta que el directorio debe
            ser una ruta completa al directorio (no una ruta relativa).
          
            Estas opciones sólo funcionan cuando no usa la opción
            --skip-symbolic-links . Su sistema
            operativo debe tener una llamada
            realpath() que funcione bien. Consulte
            Sección 7.6.1.2, “Utilización de enlaces simbólicos para tablas en Unix” para más
            información.
          
        En MySQL 5.0, puede crear una tabla de otra añadiendo un
        comando SELECT al final del comando
        CREATE TABLE :
      
CREATE TABLEnew_tblSELECT * FROMorig_tbl;
        MySQL crea nuevas columnas para todos los elementos en un
        SELECT. Por ejemplo:
      
mysql> CREATE TABLE test (a INT NOT NULL AUTO_INCREMENT,
    ->        PRIMARY KEY (a), KEY(b))
    ->        TYPE=MyISAM SELECT b,c FROM test2;
        Esto crea una tabla MyISAM con tres columnas,
        a, b, y
        c. Tenga en cuenta que las columnas para el
        comando SELECT se añaden a la derecha de la
        tabla, no se sobreescriben en la misma. Consulte el siguiente
        ejemplo:
      
mysql> SELECT * FROM foo; +---+ | n | +---+ | 1 | +---+ mysql> CREATE TABLE bar (m INT) SELECT n FROM foo; Query OK, 1 row affected (0.02 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM bar; +------+---+ | m | n | +------+---+ | NULL | 1 | +------+---+ 1 row in set (0.00 sec)
        Para cada registro en la tabla foo, se
        inserta un registro en bar con los valores de
        foo y valores por defecto para las nuevas
        columnas:
      
Si hay cualquier error al copiar los datos a la tabla, se borra automáticamente y no se crea.
        CREATE TABLE ... SELECT no crea ningún
        índice automáticamente. Se hace a propósito para hacer el
        comando lo más flexible posible. Si quiere tener índices en la
        tabla creada, debe especificarlo antes del comando
        SELECT :
      
mysql> CREATE TABLE bar (UNIQUE (n)) SELECT n FROM foo;
        Algunas conversiones de tipos de columnas pueden ocurrir. Por
        ejemplo, el atributo AUTO_INCREMENT no se
        preserva, y las columnas VARCHAR pueden ser
        CHAR .
      
        Al crear una tabla con CREATE ... SELECT,
        asegurése de poner un alias para cualquier llamada a función o
        expresión en la consulta. Si no lo hace, el comando
        CREATE puede fallar o crear nombres de
        columnas no deseados.
      
CREATE TABLE artists_and_works SELECT artist.name, COUNT(work.artist_id) AS number_of_works FROM artist LEFT JOIN work ON artist.id = work.artist_id GROUP BY artist.id;
Puede especificar explícitamente el tipo de una columna generada:
CREATE TABLE foo (a TINYINT NOT NULL) SELECT b+1 AS a FROM bar;
        En MySQL 5.0, use LIKE para crear una tabla
        vacía basada en la definición de otra tabla, incluyendo
        cualquier atributo de columna e índice definido en la tabla
        original:
      
CREATE TABLEnew_tblLIKEorig_tbl;
        CREATE TABLE ... LIKE no copia ninguna
        opción de tabla DATA DIRECTORY o
        INDEX DIRECTORY especificadas en la tabla
        original, ni ninguna definición de clave foránea.
      
        Puede preceder SELECT con
        IGNORE o REPLACE para
        indicar cómo tratar registros que dupliquen claves únicas. Con
        IGNORE, los nuevos registros que duplican un
        registro único existente se descartan. Con
        REPLACE, los nuevos registros reemplazan a
        los antiguos con el mismo valor. Si ni IGNORE
        ni REPLACE se indican, los valores únicos
        duplicados dan un error.
      
        Para asegurar que el log de update o binario puede usarse para
        recrear tablas originales, MySQL no permite inserciones
        concurrentes durante CREATE TABLE ... SELECT.
      
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

