Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Erstellen Sie eine temporäre Tabelle in MySQL mit einem Index aus einer Auswahl

Ich habe eine ganze Weile mit der richtigen Syntax für CREATE TEMPORARY TABLE SELECT gerungen. Nachdem ich ein paar Dinge herausgefunden habe, wollte ich die Antworten mit dem Rest der Community teilen.

Grundlegende Informationen über die Anweisung sind unter den folgenden MySQL-Links verfügbar:

CREATE TABLE SELECT und CREATE TABLE .

Manchmal kann es entmutigend sein, die Spezifikation zu interpretieren. Da die meisten Menschen am besten anhand von Beispielen lernen, werde ich Ihnen mitteilen, wie ich eine Arbeitsaussage erstellt habe und wie Sie sie ändern können, damit sie für Sie funktioniert.

  1. Mehrere Indizes hinzufügen

    Diese Anweisung zeigt, wie mehrere Indizes hinzugefügt werden (beachten Sie, dass Indexnamen - in Kleinbuchstaben - optional sind):

    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. Neuen Primärschlüssel hinzufügen :

    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. Erstellen Sie zusätzliche Spalten

    Sie können eine neue Tabelle mit mehr Spalten erstellen, als in der SELECT-Anweisung angegeben sind. Geben Sie die zusätzliche Spalte in der Tabellendefinition an. Spalten, die in der Tabellendefinition angegeben sind und nicht in select gefunden werden, sind die ersten Spalten in der neuen Tabelle, gefolgt von den Spalten, die durch die SELECT-Anweisung eingefügt wurden.

    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. Datentypen für die Spalten von SELECT neu definieren

    Sie können den Datentyp einer Spalte, die ausgewählt wird, neu definieren. Im Beispiel unten ist das Spalten-Tag ein MEDIUMINT in core.my_big_table, und ich definiere es in core.my_tmp_table zu BIGINT um.

    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. Erweiterte Felddefinitionen während der Erstellung

    Alle üblichen Spaltendefinitionen stehen wie beim Erstellen einer normalen Tabelle zur Verfügung. Beispiel:

    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