CREATE TEMPORARYTABLESELECTの適切な構文にかなりの時間を費やしました。いくつかのことを理解したので、コミュニティの他のメンバーと答えを共有したいと思いました。
ステートメントに関する基本情報は、次のMySQLリンクで入手できます。
CREATE TABLE SELECT
および
仕様を解釈するのが難しい場合があります。ほとんどの人は例から最もよく学ぶので、私がどのように実用的なステートメントを作成したか、そしてあなたがそれをあなたのために機能するように変更する方法を共有します。
-
複数のインデックスを追加する
このステートメントは、複数のインデックスを追加する方法を示しています(インデックス名(小文字)はオプションであることに注意してください):
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
-
新しい主キーを追加する :
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
-
追加の列を作成する
SELECTステートメントで指定されているよりも多くの列を持つ新しいテーブルを作成できます。テーブル定義で追加の列を指定します。テーブル定義で指定され、selectで見つからない列は、新しいテーブルの最初の列になり、その後に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
-
SELECTからの列のデータ型の再定義
選択されている列のデータ型を再定義できます。以下の例では、列タグはcore.my_big_tableのMEDIUMINTであり、core.my_tmp_tableのBIGINTに再定義しています。
CREATE TEMPORARY TABLE core.my_tmp_table (tag BIGINT, my_time DATETIME, INDEX my_unique_index_name (tag) ) SELECT * FROM core.my_big_table
-
作成中の高度なフィールド定義
通常のテーブルを作成するときと同じように、通常の列定義をすべて使用できます。例:
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