sql >> Base de Datos >  >> RDS >> Mysql

Cree una tabla temporal en MySQL con un índice de una selección

Luché bastante con la sintaxis adecuada para CREAR SELECCIÓN DE TABLA TEMPORAL. Habiendo descubierto algunas cosas, quería compartir las respuestas con el resto de la comunidad.

La información básica sobre la declaración está disponible en los siguientes enlaces de MySQL:

CREAR SELECCIÓN DE TABLA y CREAR TABLA .

A veces puede ser desalentador interpretar la especificación. Dado que la mayoría de las personas aprenden mejor de los ejemplos, compartiré cómo he creado una declaración de trabajo y cómo puede modificarla para que funcione para usted.

  1. Añadir varios índices

    Esta declaración muestra cómo agregar varios índices (tenga en cuenta que los nombres de los índices, en minúsculas, son opcionales):

    CREATE TEMPORARY TABLE core.my_tmp_table 
    (INDEX my_index_name (tag, time), UNIQUE my_unique_index_name (order_number))
    SELECT * FROM core.my_big_table
    WHERE my_val = 1
    
  2. Añadir una nueva clave principal :

    CREATE TEMPORARY TABLE core.my_tmp_table 
    (PRIMARY KEY my_pkey (order_number),
    INDEX cmpd_key (user_id, time))
    SELECT * FROM core.my_big_table
    
  3. Crear columnas adicionales

    Puede crear una nueva tabla con más columnas de las especificadas en la sentencia SELECT. Especifique la columna adicional en la definición de la tabla. Las columnas especificadas en la definición de la tabla y que no se encuentran en select serán las primeras columnas de la nueva tabla, seguidas de las columnas insertadas por la instrucción SELECT.

    CREATE TEMPORARY TABLE core.my_tmp_table 
    (my_new_id BIGINT NOT NULL AUTO_INCREMENT,  
    PRIMARY KEY my_pkey (my_new_id), INDEX my_unique_index_name (invoice_number))
    SELECT * FROM core.my_big_table
    
  4. Redefinición de tipos de datos para las columnas de SELECT

    Puede redefinir el tipo de datos de una columna SELECCIONADA. En el siguiente ejemplo, la etiqueta de la columna es MEDIUMINT en core.my_big_table y la estoy redefiniendo como BIGINT en core.my_tmp_table.

    CREATE TEMPORARY TABLE core.my_tmp_table 
    (tag BIGINT,
    my_time DATETIME,  
    INDEX my_unique_index_name (tag) )
    SELECT * FROM core.my_big_table
    
  5. Definiciones de campo avanzadas durante la creación

    Todas las definiciones de columna habituales están disponibles como cuando crea una tabla normal. Ejemplo:

    CREATE TEMPORARY TABLE core.my_tmp_table 
    (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    value BIGINT UNSIGNED NOT NULL DEFAULT 0 UNIQUE,
    location VARCHAR(20) DEFAULT "NEEDS TO BE SET",
    country CHAR(2) DEFAULT "XX" COMMENT "Two-letter country code",  
    INDEX my_index_name (location))
    ENGINE=MyISAM 
    SELECT * FROM core.my_big_table