Ik worstelde een tijdje met de juiste syntaxis voor CREATE TIJDELIJKE TABLE SELECT. Nadat ik een paar dingen had bedacht, wilde ik de antwoorden delen met de rest van de gemeenschap.
Basisinformatie over de verklaring is beschikbaar via de volgende MySQL-links:
MAAK TAFELSELECTIE en TABEL MAKEN .
Soms kan het ontmoedigend zijn om de specificatie te interpreteren. Aangezien de meeste mensen het beste leren van voorbeelden, zal ik vertellen hoe ik een werkverklaring heb gemaakt en hoe u deze kunt aanpassen zodat deze voor u werkt.
-
Meerdere indexen toevoegen
Deze instructie laat zien hoe u meerdere indexen kunt toevoegen (merk op dat indexnamen - in kleine letters - optioneel zijn):
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
-
Een nieuwe primaire sleutel toevoegen :
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
-
Maak extra kolommen
U kunt een nieuwe tabel maken met meer kolommen dan zijn opgegeven in de SELECT-instructie. Geef de extra kolom op in de tabeldefinitie. Kolommen die zijn opgegeven in de tabeldefinitie en niet worden gevonden in select, zijn de eerste kolommen in de nieuwe tabel, gevolgd door de kolommen die zijn ingevoegd door de SELECT-instructie.
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
-
Gegevenstypen voor de kolommen uit SELECT opnieuw definiëren
U kunt het gegevenstype van een kolom die wordt geselecteerd opnieuw definiëren. In het onderstaande voorbeeld is de kolomtag een MEDIUMINT in core.my_big_table en ik herdefinieer deze naar een BIGINT in 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
-
Geavanceerde velddefinities tijdens het maken
Alle gebruikelijke kolomdefinities zijn beschikbaar zoals wanneer u een normale tabel maakt. Voorbeeld:
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