精华内容
下载资源
问答
  • Mysql 创建临时表

    千次阅读 2018-09-05 21:56:04
    Mysql 创建临时表 create temporary table temp select * from intimacy order by totalTime desc;

    Mysql 创建临时表

    create temporary table temp
    select *
    from intimacy
    order by totalTime desc;
    • mysql 临时表只在当前session可见。
    展开全文
  • mysql创建临时表

    万次阅读 2017-08-21 18:12:05
    今天@小北童鞋遇到一个oracle的...我想到的做法就是把查询结果放到一个临时表,对临时表进行update后再次查询。 解决办法: 当临时表不存在时,将查询结果保存在临时表中:CREATE TEMPORARY TABLE tmp_table SELECT * F

    今天@小北童鞋遇到一个oracle的问题,如何将一个很复杂的查询结果进行数据更新后再次显示。因为没操作过oracle,于是研究了mysql的做法,大同小异,希望能帮到她。

    我想到的做法就是把查询结果放到一个临时表,对临时表进行update后再次查询。

    解决办法:

    当临时表不存在时,将查询结果保存在临时表中:

    CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name;

    我的具体代码是

     

    CREATE temporary table tmp
     (SELECT t1.pid a, t1.pname b,t2.pid c, t2.pdescribe d FROM
     (SELECT pid,pname FROM admin_advert_place WHERE pid IN (3,4,5,6,7)) t1 LEFT JOIN
     (SELECT pid,pdescribe FROM admin_advert_place
     WHERE pgid IN (6,7,8)) t2 ON t1.pid = t2.pid)

    然后更新:

    UPDATE tmp SET d=b WHERE a = 3;

    这样,临时表中就储存了我希望的数据。当断开连接时,临时表自动删除。


    附:mysql临时表的相关知识(转自http://www.cnblogs.com/conanwang/p/5844378.html)

    A、临时表再断开于mysql的连接后系统会自动删除临时表中的数据,但是这只限于用下面语句建立的表:
    1)定义字段
      

    CREATE TEMPORARY TABLE tmp_table (
          name VARCHAR(10) NOT NULL, 
          time date  NOT NULL
      )

    更高级点就是:
    create temporary  TABLE `temtable` (
      `jws` varchar(100) character set utf8 collate utf8_bin NOT NULL,
      `tzlb` varchar(100) character set utf8 collate utf8_bin NOT NULL,
      `uptime` date NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1″

    连编码方式都规定了。。呵呵,以防乱码啊。


    2)直接将查询结果导入临时表
     

     CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name

    B、另外mysql也允许你在内存中直接创建临时表,因为是在内存中所有速度会很快,语法如下:

     CREATE TEMPORARY TABLE tmp_table (
         name VARCHAR(10) NOT NULL,
         value INTEGER NOT NULL
      ) TYPE = HEAP
    
    

    那如何将查询的结果存入已有的表呢?

    1、可以使用A中第二个方法

    2、使用

    insert into temtable (select a,b,c,d from tablea)”;

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

            创建临时表的语法与创建表语法类似,不同之处是增加关键字TEMPORARY,如:

                   

    CREATE TEMPORARY TABLE 表名 (…. )

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

      *  临时表在 memory、myisam、merge或者innodb上使用,并且不支持mysql cluster簇);

                   show tables语句不会列出临时表,在information_schema中也不存在临时表信息;show create table可以查看临时表;

      *  不能使用rename来重命名临时表。但是可以alter table rename代替:

                 mysql>ALTER TABLE orig_name RENAME new_name;

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

                    mysql>create temporary table new_table select * from old_table;

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

                   可以使用:mysql> select * from temp_tb;

                   但不能使用:mysql> select * from temp_tb, temp_tb as t;

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

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

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

                     Mysql> select * from temp_tb1, temp_tb2;

            临时表可以手动删除:

                     DROP TEMPORARY TABLE IF EXISTS temp_tb;

     

           临时表主要用于对大数据量的表上作一个子集,提高查询效率

     

           在创建临时表时声明类型为HEAP,则Mysql会在内存中创建该临时表,即内存表:如:

                    CREATE TEMPORARY TABLE 表名 (。。。。) TYPE = HEAP

           因为HEAP表存储在内存中,你对它运行的查询可能比磁盘上的临时表快些。如:

    mysql> create temporary table temp_tb type='heap' select * from temptb;

    Query OK, 0 rows affected, 1 warning (0.01 sec)

    Records: 0  Duplicates: 0  Warnings: 0

     

    mysql> show create table temp_tb \G;

    *************************** 1. row ***************************

           Table: temp_tb

    Create Table: CREATE TEMPORARY TABLE `temp_tb` (

      `id` int(10) unsigned NOT NULL DEFAULT '0',

      `Name` char(20) NOT NULL,

      `Age` tinyint(4) NOT NULL

    ) ENGINE=MEMORY DEFAULT CHARSET=gbk

    1 row in set (0.00 sec)

     

    ERROR:

    No query specified

             可以看出来临时表和内存表的ENGINE 不同,临时表默认的是Mysql指定的默认Engine,而内存表是MEMORY。

    官方手册:
    As indicated by the name, MEMORY tables are stored in memory. They use hash indexes by default, which makes them very fast, and very useful for creating temporary tables. However, when the server shuts down, all rows stored in MEMORY tables are lost. The tables themselves continue to exist because their definitions are stored in .frm files on disk, but they are empty when the server restarts.

     

    内存表的建立还有一些限制条件
          MEMORY tables cannot contain        BLOB or TEXT columns. HEAP不支持BLOB/TEXT列。    
          The server needs sufficient memory to maintain all   MEMORY tables that are in use at the same time. 在同一时间需要足够的内存.
          To free memory used by a MEMORY table when   you no longer require its contents, you should execute DELETE or TRUNCATE TABLE, or remove the table altogether using DROP        TABLE.为了释放内存,你应该执行DELETE FROM heap_table或DROP TABLE heap_table。

     

    临时表和内存表

            临时表主要是为了放一些中间大结果集的一些子集,内存表可以放一些经常频繁使用的数据。

            *  临时表:表建在内存里,数据在内存里
            *  内存表:表建在磁盘里,数据在内存里

            临时表和内存表所使用内存大小可以通过My.cnf中的max_heap_table_size、tmp_table_size指定:
                  [mysqld]
                  max_heap_table_size=1024M   #内存表容量
                  tmp_table_size=1024M              #临时表容量

            当数据超过临时表的最大值设定时,自动转为磁盘表,此时因需要进行IO操作,性能会大大下降,而内存表不会,内存表满后,则会提示数据满错误。

           show tables 命令不会显示临时表。

            以下是对内存表和临时表之间区别的总结:

       内存表:

            1.缺省存储引擎为MEMORY
            2.可以通过参数max_heap_table_size来设定内存表大小
            3.到达max_heap_table_size设定的内存上限后将报错
            4.表定义保存在磁盘上,数据和索引保存在内存中
            5.不能包含TEXT、BLOB等字段
       临时表:

            1.缺省存储引擎为MySQL服务器默认引擎,引擎类型只能是:memory(heap)、myisam、merge、innodb(memory临时表由于表的增大可能会转变为myisam临时表)
            2.可以通过参数 tmp_table_size 来设定临时表大小。
            3.到达tmp_table_size设定的内存上限后将在磁盘上创建临时文件
            4.表定义和数据都保存在内存中
            5.可以包含TEXT, BLOB等字段

            临时表一般比较少用,通常是在应用程序中动态创建或者由MySQL内部根据SQL执行计划需要自己创建。

            内存表则大多作为Cache来使用,特别在没有第三方cache使用时。如今随着memcache、NoSQL的流行,越来越少选择使用内存表。

     

    MySQL服务器使用内部临时表

            在某些情况下,mysql服务器会自动创建内部临时表。查看查询语句的执行计划,如果extra列显示“using temporary”即使用了内部临时表。内部临时表的创建条件:

            *  group by 和 order by中的列不相同

            *  order by的列不是引用from 表列表中 的第一表

            *  group by的列不是引用from 表列表中 的第一表

            *  使用了sql_small_result选项

            *  含有distinct 的 order by语句

            初始创建内部myisam临时表的条件:

            *  表中存在text、blob列

            *  在group by中的 列 有超过512字节

            *  在distinct查询中的 列 有超过512字节

            *  在union、union all联合查询中,select 列 列表中的 列 有超过512字节的

     

    MySQL如何使用临时表??
    【临时表存储】
    MySQL临时表分为“内存临时表”和“磁盘临时表”,其中内存临时表使用MySQL的MEMORY存储引擎,磁盘临时表使用MySQL的MyISAM存储引擎;
    一般情况下,MySQL会先创建内存临时表,但内存临时表超过配置指定的值后,MySQL会将内存临时表导出到磁盘临时表。

    【使用临时表的场景】
    1)ORDER BY子句和GROUP BY子句不同,
    例如:ORDERY BY price GROUP BY name;

    2)在JOIN查询中,ORDER BY或者GROUP BY使用了不是第一个表的列
    例如:SELECT * from TableA, TableB ORDER BY TableA.price GROUP by TableB.name

    3)ORDER BY中使用了DISTINCT关键字
    ORDERY BY DISTINCT(price)

    4)SELECT语句中指定了SQL_SMALL_RESULT关键字
    SQL_SMALL_RESULT的意思就是告诉MySQL,结果会很小,请直接使用内存临时表,不需要使用索引排序
    SQL_SMALL_RESULT必须和GROUP BY、DISTINCT或DISTINCTROW一起使用
    一般情况下,我们没有必要使用这个选项,让MySQL服务器选择即可。

    【直接使用磁盘临时表的场景】
    1)表包含TEXT或者BLOB列;
    2)GROUP BY 或者 DISTINCT 子句中包含长度大于512字节的列;
    3)使用UNION或者UNION ALL时,SELECT子句中包含大于512字节的列;

    【临时表相关配置】
    tmp_table_size:指定系统创建的内存临时表最大大小;
    http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_tmp_table_size

    max_heap_table_size: 指定用户创建的内存表的最大大小;
    http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_max_heap_table_size

    注意:最终的系统创建的内存临时表大小是取上述两个配置值的最小值。

    【表的设计原则】
    使用临时表一般都意味着性能比较低,特别是使用磁盘临时表,性能更慢,因此我们在实际应用中应该尽量避免临时表的使用。

    如果实在无法避免,也应该尽量避免使用磁盘临时表。

    常见的方法有:

    1)创建索引:在ORDER BY或者GROUP BY的列上创建索引,这样可以避免使用临时表;
    2)分拆很长的列,可以避免使用磁盘临时表:一般情况下,TEXT、BLOB,大于512字节的字符串,基本上都是为了显示信息,而不会用于查询条件,因此表设计的时候,应该将这些列独立到另外一张表。

    【如何判断使用了临时表?】
    使用explain查看执行计划,Extra列看到Using temporary就意味着使用了临时表。
    展开全文
  • mysql 创建临时表

    千次阅读 2019-04-03 13:39:18
    创建: create table tmp_(SELECT * FROM shzy.social_qd_db_all_dxy a WHERE 1 = 1 and pz_date >= DATE_FORMAT('2019-03-25 10:01:01','%Y-%m-%d %H:%i:%s') and pz_date <= ...

    创建:

    	create table tmp_(SELECT
    				*
    			FROM
    				shzy.social_qd_db_all_dxy a 
    			WHERE
    				1 = 1 
    			and pz_date >= DATE_FORMAT('2019-03-25 10:01:01','%Y-%m-%d %H:%i:%s') 
    			and pz_date <= DATE_FORMAT('2019-03-25 10:15:00','%Y-%m-%d %H:%i:%s') 
    			);

    查询:

    	select a.* from tmp_ a ,tmp_ b where a.cph!=b.cph 
    			and 0 < TIMESTAMPDIFF(MINUTE, a.pz_date, b.pz_date)<10
    			and 0 < TIMESTAMPDIFF(MINUTE, a.mz_date, b.mz_date)<10
    			and 0 < a.mz - b.mz <500;

    删除:

    drop table shzy.tmp_;

     

    展开全文
  • php mysql创建临时表

    千次阅读 2013-07-23 12:16:35
    mysql创建临时表的方法并不复杂,下面就为您详细介绍php mysql创建临时表的实现方法,希望对您学习mysql创建临时表方面能有所帮助。 php $link=mysql_connect('localhost','root','456789'); if($

    ref:http://database.51cto.com/art/201011/234786.htm

    mysql创建临时表的方法并不复杂,下面就为您详细介绍php mysql创建临时表的实现方法,希望对您学习mysql创建临时表方面能有所帮助。

     
    1. <?php 
    2. $link=mysql_connect('localhost','root','456789');  
    3.   if($link){  
    4.  
    5.     mysql_select_db('cppc360',$link);  
    6.     mysql_query("set names 'gbk'");  
    7.     echo "数据库连接已经成功!";  
    8.     }  
    9.  
    10. $temp_sql = "create temporary table tmp_query (tmp_id int(11) NOT NULL auto_increment PRIMARY KEY,id int(11) default NULL,area varchar(20) default NULL)";  
    11.  
    12. $temp_query = mysql_query($temp_sql);  
    13. $sql="insert into tmp_query(id,area) select id,area from php168_item_content_1 where content like '%电厂%' order by id desc";  
    14.    mysql_query($sql);  
    15.  
    16.     $sql="select * from tmp_query";  
    17.     $query1=mysql_query($sql);  
    18.     echo mysql_num_rows($query1);  
    19.     while($rs=mysql_fetch_array($query1)){  
    20.         echo $rs[id]."&nbsp;&nbsp;".$rs[area]."<br>";  
    21.     }  
    22. ?> 
    23.    
    24.  
    展开全文
  • MySQL在以下几种情况会创建临时表: 1、UNION查询; 2、用到TEMPTABLE算法或者是UNION查询中的视图; 3、ORDER BY和GROUP BY的子句不一样时; 4、表连接中,ORDER BY的列不是驱动表中的; 5、DISTINCT查询并且加上...
  • 一:语句 drop table if exists a_temp; create table a_temp select content from article 二:springboot mybatis下临时表的创建和删除,可... * 创建临时表 */ @Update({"drop temporary table if exists $...
  • 关于mysql创建临时表

    2011-04-11 10:04:00
    1、临时表再断开于mysql的连接后系统会自动删除临时表中的数据,但是这只限于用下面语句建立的表: 1)定义字段 CREATE TEMPORARY TABLE tmp_table ( name VARCHAR(10) NOT NULL, value INTEGER NOT NULL ...
  • Mysql创建临时表的方法

    千次阅读 2013-11-01 13:47:07
    SET @id = "212,45,378"; DROP TEMPORARY TABLE IF EXISTS tem_result; CREATE TEMPORARY TABLE tem_result(id BIGINT(20) NOT NULL); SET cnt = 1+(LENGTH(@id) - LENGTH(REPLACE(@id,',','')));...
  • 我记得学数据库理论课老师说可以创建临时表,不知道mysql有没有这样的功能呢?临时表在内存之中,读取速度应该比视图快一些。然后还需要将查询的结果存储到临时表中。下面是创建临时表以及插入数据的例子,以供大家...
  • MySql创建临时表和特殊关联语句

    千次阅读 2015-09-24 11:18:25
    地区的问题 一些树形结构的,为了从最末级别,找到最高级别,特意给中加了一个字段,专门记录路径,方便人能从最末级别找到最高级别。 中加一个字段:path,专门靠程序维护这个字段,新增时,要同时收集从...
  • MySQL 临时表

    2020-12-16 16:20:16
    MySQL 临时表 MySQL 临时表在我们需要保存一些临时数据时是非常有用的。...如果你使用了其他MySQL客户端程序连接MySQL数据库服务器来创建临时表,那么只有在关闭客户端程序时才会销毁临时表,当然你也可以手动销毁
  • 主要介绍了MySQL临时表的基本创建与使用教程,注意临时表中数据的清空问题,需要的朋友可以参考下
  • MySQL内部临时表策略

    2021-01-19 22:07:27
     1、DISTINCT查询,但是简单的DISTINCT查询,比如对primary key、unique key等DISTINCT查询时,查询优化器会将DISTINCT条件优化,去除DISTINCT条件,也不会创建临时表;  2、不是第一个表的字段使用ORDER BY ...
  • mysql动态创建临时表

    千次阅读 2016-12-24 14:04:47
    -- 创建临时表  set v_sql='create temporary table if not exists temp_visit_status_list( projectid varchar(32),statustype varchar(50),personid int(11),';-- 去除最后逗号  set i = 1;  WHILE i  set v...
  • 这篇文章主要介绍了Mysql临时表原理及创建方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 mysql 利用 temporary 关键字就可以创建出一个临时表创建...
  • 把表的一个子集进行排序并创建MySQL临时表,有时能加速查询。它有助于避免多重排序操作,而且在其他方面还能简化优化器的工作。例如: 代码如下:SELECT cust.name,rcVBles.balance,……other columns  SELECT ...
  • mysql 创建大量磁盘临时表

    千次阅读 2018-04-28 14:22:30
    发现 mysql创建临时表基本都是磁盘临时表,对此进行排查。最后为临时表机制说明。通过查看 mysql 状态变量,看到创建临时表基本都是磁盘临时表。查看临时表配置,默认配置 16M,配置并没有问题。创建两个表,...
  • mysql临时表简介

    千次阅读 2019-06-21 13:41:48
    MySQL临时表 首先,临时表只在当前连接可见,当...创建临时表的语法与创建表语法类似,不同之处是增加关键字TEMPORARY,如: CREATE TEMPORARY TABLE 表名 (…. ) 临时表使用有一些限制条件: 临时表在 memory...
  • sqlserver临时表与永久表类似,但不再使用时会自动删除。 sqlserver临时表特点如下: 创建表时在表名前加... 创建临时表时表名称以(#)打头,仅对当前用户连接可见,断开连接时自动删除。 在一次连接...
  • MySQL在以下几种情况会创建临时表

    万次阅读 2016-11-22 14:55:56
    MySQL在以下几种情况会创建临时表: 1、UNION查询; 2、用到TEMPTABLE算法或者是UNION查询中的视图; 3、ORDER BY和GROUP BY的子句不一样时; 4、表连接中,ORDER BY的列不是驱动表中的; 5、DISTINCT查询并且加上...
  • MySql中的临时表

    千次阅读 2015-11-06 10:24:12
    mysql创建临时表:  CREATE TEMPORARY TABLE temp1(myname VARCHAR(10) NOT NULL); mysql创建内存表:  CREATE TABLE `tablename` ( `columnName` varchar(256) NOT NUL) ENGINE=MEMORY DEFAULT CHARSET=utf8 ...
  • 这两天事情稍微有点多,公众号也...临时表是session级别的,当前session创建的表,在其他session中看不到。 session 1: mysql> create temporary table test3 (id_tmp int)engine=innodb; Query OK, 0 rows affecte
  • 我一开始用的是@Update标签来创建临时表,但是发现当我用Select语句查找这个临时表中的相关数据时,并不能找到这个表,说明创建失败,请问如何用Mybatis注解来创建mysql的临时表???
  • MySQL临时表

    千次阅读 2016-11-23 15:53:41
    1.临时表存储MySQL临时表分为“内存临时表”和“磁盘临时表”,其中内存临时表默认使用MySQL的MEMORY存储引擎, default_tmp_storage_engine 可以控制 CREATE TEMPORARY TABLE 创建临时表的引擎类型,默认是MEMORY...
  • MYSQL 临时表用法总结

    2020-12-14 17:30:32
    MYSQL 临时表用法总结 1.背景 老项目最近被吐槽性能不行,经排查发现mysql占用cpu...如果在你创建名为test_table_20200313临时表时名为test_table_20200313的表在数据库中已经存在,临时表将隐藏非临时表test_table_202

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 97,544
精华内容 39,017
关键字:

mysql创建临时表

mysql 订阅