MySql 临时表

Wesley13
• 阅读 961

今天在项目中遇到一个,当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 临时表

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

   此时当我们关掉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;

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
3年前
sql注入
反引号是个比较特别的字符,下面记录下怎么利用0x00SQL注入反引号可利用在分隔符及注释作用,不过使用范围只于表名、数据库名、字段名、起别名这些场景,下面具体说下1)表名payload:select\from\users\whereuser\_id1limit0,1;!(https://o
Wesley13 Wesley13
3年前
DB2的一种临时表写法
最近在使用DB2的临时表,学到了一种不用创建临时表再删除临时表的写法:SELECT\FROMTABLE(VALUES(COLUMN\_VALUE,COLUMN\_VALUE))TABLE\_NAME(COLUMN\_NAME,COLUMN\_NUM).比如:SELECTA,BFROMTABLE(VALUES('1','2'),('
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
oracle:ORA
报ORA25153,这一定是临时表空间逻辑名还在,但是找不到临时文件的原因。解决方法:1、查询临时表空间状态状态selecttablespace\_name,statusfromdba\_tablespaces;TABLESPACE\_NAMESTATUS\SYSTEMONL
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这