• MySql 临时表 仅此而已


    今天在项目中遇到一个,当mysql的in语句中数据量很大时,建立一个临时表的例子。于是楼主整理了一下关于临时表的知识,与大家分享一下~

    首先,临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。因此在不同的连接中可以创建同名的临时表,并且操作属于本连接的临时表。

    建立临时表:

     CREATE TEMPORARY  TABLE temp_table (
        id VARCHAR(32) NOT NULL,
        NAME VARCHAR(100)
      ) ENGINE = MEMORY

    注意最后面的ENGINE = MEMORY,其中ENGINE是数据库引擎,常用的几种类型为MyISAM、MEMORY、InnoDB(默认)

     1)MyISAM 管理非事物表。提供高速存储和检索,以及全文搜索能力

     2)MEMORY存储引擎提供“内存中”表。就像MyISAM一样,MEMORY和MERGE存储引擎处理非事务表

       注释:MEMORY存储引擎正式地被确定为HEAP引擎。

     3)InnoDB和存储引擎提供事务安全表。

    当然还有一种简单粗暴的方式建立临时表,直接将查询结果导入到临时表:

      CREATE TEMPORARY  TABLE temp_table
      ENGINE = MEMORY
      SELECT * FROM `bm_sc_settlement` 

    创建临时表后,我们插入数据:

      INSERT INTO temp_table VALUES('1', 'a');
      INSERT INTO temp_table VALUES('2', 'b');
      INSERT INTO temp_table VALUES('3', 'c');
      INSERT INTO temp_table VALUES('4', 'd');
      INSERT INTO temp_table VALUES('5', 'e');

     查询:

        SELECT * FROM temp_table;

       

       可以看到我们插入的结果已经放到临时表中(也可以做更新及删除操作)

       此时当我们关掉mysql客户端(楼主用的SQLyog),然后重新打开。执行查询临时表操作,会提示找不到该临时表

    删除临时表:

       DROP TEMPORARY TABLE IF EXISTS temp_table;

    临时表使用有一些限制条件

        1)在同一个query语句中,相同的临时表只能出现一次。如:

          SELECT * FROM temp_table a ,temp_table b;

              错误信息:ERROR 1137 (HY000): Can't reopen table: 'temp_table'

             同样相同临时表不能在存储函数中出现多次,如果在一个存储函数里,用不同的别名查找一个临时表多次,或者在这个存储函数里用不同的语句查找,都会出现这个错误。

     2) 不同的临时表可以出现在同一个query语句中,如临时表temp_tb1, temp_tb2:

         select * from temp_tb1, temp_tb2;

     3)可以复制临时表得到一个新的临时表,如:

         create temporary table new_table select * from old_table;

  • 相关阅读:
    gmap 整理
    记录一次mybatis genertor使用以及mapper扫描遇见的问题
    mysql 记录
    NOIP2018Day1!!!题目出炉!!!
    图论——倍增求LCA
    干货系列——模板 之 图论1
    数学专题1
    动态规划——背包问题1:01背包
    图论——最短路——Dijkstra算法
    数据结构——并查集
  • 原文地址:https://www.cnblogs.com/xuwenjin/p/8658239.html
Copyright © 2020-2023  润新知