sql >> Database teknologi >  >> RDS >> Mysql

Opret en midlertidig tabel i MySQL med et indeks fra en udvalgt

Jeg kæmpede et stykke tid med den rigtige syntaks til CREATE TEMPORARY TABLE SELECT. Efter at have fundet ud af et par ting, ville jeg dele svarene med resten af ​​fællesskabet.

Grundlæggende information om erklæringen er tilgængelig på følgende MySQL-links:

OPRET TABELVALG og OPRET TABEL .

Til tider kan det være skræmmende at fortolke specifikationerne. Da de fleste mennesker lærer bedst af eksempler, vil jeg dele, hvordan jeg har lavet en arbejdserklæring, og hvordan du kan ændre den, så den fungerer for dig.

  1. Tilføj flere indekser

    Denne erklæring viser, hvordan man tilføjer flere indekser (bemærk, at indeksnavne - med små bogstaver - er valgfrie):

    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. Tilføj en ny primær nøgle :

    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. Opret yderligere kolonner

    Du kan oprette en ny tabel med flere kolonner, end der er angivet i SELECT-sætningen. Angiv den ekstra kolonne i tabeldefinitionen. Kolonner angivet i tabeldefinitionen og ikke fundet i select vil være første kolonner i den nye tabel efterfulgt af kolonnerne indsat af SELECT-sætningen.

    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. Omdefinering af datatyper for kolonnerne fra SELECT

    Du kan omdefinere datatypen for en kolonne, der vælges. I eksemplet nedenfor er kolonnetag et MEDIUMINT i core.my_big_table, og jeg omdefinerer det til et BIGINT i 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. Avancerede feltdefinitioner under oprettelse

    Alle de sædvanlige kolonnedefinitioner er tilgængelige, som når du opretter en normal tabel. Eksempel:

    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
    


  1. Sammenfletning af sammenkædning af JSON(B)-kolonner i forespørgsel

  2. Hvilken version af MySQL er kompatibel med Airflow version 1.10?

  3. Gruppér rækker ved hjælp af gruppe efter klausul i MySQL

  4. Giv privilegier på flere borde med et specifikt præfiks