首页 文章

在SELECT语句中创建临时表,而不使用单独的CREATE TABLE

提问于
浏览
443

是否可以在不使用create table语句并指定每个列类型的情况下从select语句创建临时(仅会话)表?我知道派生表能够做到这一点,但那些是超临时的(仅限语句),我想重用 .

如果我不必编写create table命令并保持列列表和类型列表匹配,那么可以节省时间 .

5 回答

  • 126
    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表仅对当前会话可见,并在会话关闭时自动删除 . 这意味着两个不同的会话可以使用相同的临时表名,而不会相互冲突或与现有的同名非TEMPORARY表冲突 . (在删除临时表之前,将隐藏现有表 . )要创建临时表,您必须具有CREATE TEMPORARY TABLES特权 .

  • 58

    除了psparrow的答案,如果你需要 add an index 到你的临时表做:

    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

  • 34

    使用以下语法:

    CREATE TEMPORARY TABLE t1 (select * from t2);
    
  • 722

    引擎必须在选择之前:

    CREATE TEMPORARY TABLE temp1 ENGINE=MEMORY 
    as (select * from table1)
    
  • 54

    当表包含 BLOB / TEXT 列时,不支持 ENGINE=MEMORY

相关问题