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.
-
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
-
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
-
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
-
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
-
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