create tableステートメントを使用せずに各列タイプを指定せずに、selectステートメントから一時(セッションのみ)テーブルを作成することはできますか?派生テーブルでこれが可能であることは知っていますが、それらはスーパーテンポラリー(ステートメントのみ)であり、再利用したいと考えています。
create tableコマンドを作成して列リストとタイプリストを一致させる必要がない場合は、時間を節約できます。
create tableステートメントを使用せずに各列タイプを指定せずに、selectステートメントから一時(セッションのみ)テーブルを作成することはできますか?派生テーブルでこれが可能であることは知っていますが、それらはスーパーテンポラリー(ステートメントのみ)であり、再利用したいと考えています。
create tableコマンドを作成して列リストとタイプリストを一致させる必要がない場合は、時間を節約できます。
回答:
CREATE TEMPORARY TABLE IF NOT EXISTS table2 AS (SELECT * FROM table1)
http://dev.mysql.com/doc/refman/5.7/en/create-table.htmlにあるマニュアルから
テーブルを作成するときにTEMPORARYキーワードを使用できます。TEMPORARYテーブルは現在のセッションでのみ表示され、セッションが閉じられると自動的に削除されます。これは、2つの異なるセッションが互いに、または同じ名前の既存の非TEMPORARYテーブルと競合することなく、同じ一時テーブル名を使用できることを意味します。(既存のテーブルは、一時テーブルが削除されるまで非表示になります。)一時テーブルを作成するには、CREATE TEMPORARY TABLES特権が必要です。
create table t as select ... limit 0; alter table t engine=memory; insert into t select ...
。または、「新しいテーブルのデフォルトエンジン」を変更することもできます。これはセッションレベルの変数で実行できると思います。さらに、右上の[質問する]ボタンを使用してください。
CREATE TEMPORARY TABLE IF NOT EXISTS table2 LIKE table1
データをコピーしたくない場合は、構造だけでこのように使用できます
一時テーブルにインデックスを追加する必要がある場合は、psparrowの回答に加えて、次の操作を行います。
CREATE TEMPORARY TABLE IF NOT EXISTS
temp_table ( INDEX(col_2) )
ENGINE=MyISAM
AS (
SELECT col_1, coll_2, coll_3
FROM mytable
)
また、 PRIMARY KEY
次の構文を使用します。
CREATE TEMPORARY TABLE t1 (select * from t2);
CREATE TEMPORARY TABLE IF NOT EXISTS to_table_name AS (SELECT * FROM from_table_name)
temporary
のでcreate temporary table mytable as select ...
。