首先来看看官网给的有关MySQL的临时表的简介:
In MySQL, a temporary table is a special type of table that allows you to store a temporary result set, which you can reuse several times in a single session.
A temporary table is very handy when it is impossible or expensive to query data that requires a single SELECT statement with the JOIN clauses. In this case, you can use a temporary table to store the immediate result and use another query to process it.

总结而来就是:
当我们需要使用难以接受的或开销很大的一个SELECT语句和JOIN子句的数据时,临时表非常方便。

一、语法

大致同CREATE TABLE语法,创建临时表则是CREATE TEMPORARY TABLE,增加了TEMPORARY关键字表示临时表。
1.创建
(1)创建不同于现有表的临时表

CREATE TEMPORARY TABLE table_name(column_1_definition,column_2_definition,...,table_constraints
);

实例:

//首先,创建一个新的临时表,称为credits存储客户的信用:
CREATE TEMPORARY TABLE credits(customerNumber INT PRIMARY KEY,creditLimit DEC(10,2)
);
//然后,将customers表中的行插入临时表中credits:
INSERT INTO credits(customerNumber,creditLimit)
SELECT customerNumber, creditLimit
FROM customers
WHERE creditLimit > 0;

(2)创建结构基于现有表的临时表
不能使用该CREATE TEMPORARY TABLE … LIKE语句。而是,使用以下语法:

CREATE TEMPORARY TABLE temp_table_name
SELECT * FROM original_table
LIMIT 0;

实例:

//下面的示例创建一个临时表,该表按收入存储前10名客户。临时表的结构是从以下SELECT语句派生的:
CREATE TEMPORARY TABLE top_customers
SELECT p.customerNumber, c.customerName, ROUND(SUM(p.amount),2) sales
FROM payments p
INNER JOIN customers c ON c.customerNumber = p.customerNumber
GROUP BY p.customerNumber
ORDER BY sales DESC
LIMIT 10;
//从top_customers临时表中查询数据,就像从永久表中查询一样:
SELECT customerNumber, customerName, sales
FROMtop_customers
ORDER BY sales;

2.删除
可以通过DROP TABLE语句删除临时表,但不推荐这样,因为当临时表与永久表同名时,有可能会误删永久表,当然若你已经准备好机票,我就祝你一路顺风吧!若你未曾准备好机票,这里也给你提供中航订票电话:0086-95583 | 0086-10-95583,祝你好运!
推荐:

DROP TEMPORARY TABLE table_name;

注意:
(1)如果尝试使用该DROP TEMPORARY TABLE语句删除永久表,则会收到一条错误消息,提示您尝试删除的表是未知的。愉快地避免删表的误操作了。
(2)如果开发使用连接池持久连接的应用程序,则不能保证在终止应用程序时自动删除临时表。因为该应用程序使用的数据库连接可能仍处于打开状态,并放置在连接池中,以便其他客户端以后再使用。因此,一个好习惯是在不再使用临时表时始终删除它们。
(3)在采用连接池的情况下,为防止多次CREATE 、 DROP TEMPORARY TABLE带来的性能瓶颈,可以使用CREATE IF NOT EXISTS + TRUNCATE TABLE 的方式来提升性能。(注意:IF NOT EXISTS是在TABLE之后,table_name之前的。)

二、功能

(1)通过使用CREATE TEMPORARY TABLE语句创建一个临时表。请注意,该关键字TEMPORARY已添加到CREATE和TABLE关键字之间 。
(2)当会话结束或连接终止时,MySQL自动删除临时表。当然,您可以在DROP TABLE不再使用临时表时使用该 语句显式删除该临时表。
(3)临时表仅对创建它的客户端可用并且可以访问。不同的客户端可以创建具有相同名称的临时表而不会导致错误,因为只有创建临时表的客户端才能看到它。但是,在同一会话中,两个临时表不能共享相同的名称。
(4)临时表可以与数据库中的普通表具有相同的名称。例如,如果您创建一个employees在示例数据库中命名的临时表,则现有employees表将变得不可访问。您针对该employees表发出的每个查询现在都引用该临时表 employees。当您删除employees临时表时,永久employees表可用且可访问。
但即使临时表可以与永久表具有相同的名称,也不建议使用。因为这可能导致混乱并可能导致意外的数据丢失。例如,如果与数据库服务器的连接丢失并且您自动重新连接到服务器,则无法区分临时表和永久表。然后,您可以发出一条DROP TABLE 语句删除永久表而不是临时表,这是不期望的。为避免此问题,可以使用该DROP TEMPORARY TABLE语句删除临时表。

三、检查是否存在临时表

MySQL不提供直接检查临时表是否存在的函数或语句。但是,我们可以创建一个存储过程来检查临时表是否存在,如下所示:

DELIMITER //
CREATE PROCEDURE check_table_exists(table_name VARCHAR(100))
BEGINDECLARE CONTINUE HANDLER FOR SQLSTATE '42S02' SET @err = 1;SET @err = 0;SET @table_name = table_name;SET @sql_query = CONCAT('SELECT 1 FROM ',@table_name);PREPARE stmt1 FROM @sql_query;IF (@err = 1) THENSET @table_exists = 0;ELSESET @table_exists = 1;DEALLOCATE PREPARE stmt1;END IF;
END //
DELIMITER ;//在此过程中,我们尝试从临时表中选择数据。如果临时表存在,则将该@table_exists变量设置为1,否则,将其设置为0。//该语句调用check_table_exists来检查临时表是否credits 存在:
CALL check_table_exists('credits');
SELECT @table_exists;//根据输出判断临时表是否存在

四、与MEMORY比较

我们知道还有一种通过存储引擎创建临时表的方式ENGINE|TYPE = MEMORY,这种方式创建的临时表是在内存中的,效率在理论上是比TEMPORARY更高的,因为MEMORY是在内存中,TEMPORARY是同永久表在磁盘上的。
实例:

CREATE TEMPORARY TABLE table_name(column_1_definition,column_2_definition,...,table_constraints
) ENGINE|TYPE = MEMORY;

官网介绍:
Introduction to MySQL temporary tables

以梦为马,以汗为泉,不忘初心,不负韶华!

MySQL中临时表(TEMPORARY)相关推荐

  1. mysql temporary_MySQL中临时表(TEMPORARY)

    首先来看看官网给的有关MySQL的临时表的简介: In MySQL, a temporary table is a special type of table that allows you to s ...

  2. mysql临时表共享_IT大叔忙里偷闲给大家带来mysql中临时表和正则表达式的分享

    最近项目实在太忙,连着加了两个礼拜的班,所以造成了拖更,在这里给读者朋友说声抱歉,老韩一定会尽量挤出来时间给大家继续数据库的分享.今天分享的内容是mysql临时表和正则表达式,希望读者朋友能有所收获. ...

  3. C#操作mysql中临时表不自动删除

    用c#调用mysql的存储过程,存储过程中用到临时表,每次第一次调用正确,刷新就报错了"显示临时表已存在",看临时表说明是"只在当前连接可见,当这个连接关闭的时候,会自动 ...

  4. MySQL中CREATE语法

    初学数据库时,身为DDL的CREATE语句就是必修的,也可以说是最早接触的,可能很多人还是只清楚简单的CREATE TABLE table_name (-):我曾经也是如此,顶多知道括号后面可以跟一些 ...

  5. mysql 创建临时表 时间类型_MySQL问答系列之什么情况下会用到临时表

    临时表介绍 什么是临时表:MySQL用于存储一些中间结果集的表,临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间.为什么会产生临时表:一般是由于复杂的SQL导致临时表被大量创 ...

  6. mysql 临时列_如何在MySQL中列出临时表列?

    要列出MySQL中的临时表列,让我们首先创建一个临时表. 这是一个例子.我们创建了一个临时表,其中包含一些列,其中包括学生的详细信息-mysql> CREATE TEMPORARY TABLE  ...

  7. MySQL 中的myisam内部临时表

    摘要: 本文只是记录一下验证过程,源码比较复杂,时间有限没仔细读过.如有误导请见谅. 源码版本 percona 5.7.14 一.问题由来 一个朋友问我下面的tmp目录的文件是干什么的,一会就删除了. ...

  8. mysql临时表的使用实例_MySQL中临时表的使用示例

    这两天事情稍微有点多,公众号也停止更新了几天,结果有读者催更了,也是,说明还是有人关注,利己及人,挺好. 今天分享的内容是MySQL中的临时表,对于临时表,之前我其实没有过多的研究,只是知道MySQL ...

  9. mysql中视图和表的区别及联系_MySQL中Update、select联用操作单表、多表,及视图与临时表的区别...

    一.MySQL中使用从表A中取出数据来更新表B的内容 例如:要update表data中的一些列属性,但是修改属性的内容来源是来自表chanpin.SQL语言中不要显示的出现select关键字 upda ...

  10. mysql中的临时表怎么用的?

    1.什么是临时表 内部临时表是sql语句执行过程中,用来存储中间结果的的数据表,其作用类似于:join语句执行过程中的joinbuffer,order by语句执行过程中的sortBuffer一样.这 ...

最新文章

  1. 基于epoll实现一个IO多路复用的回声服务器
  2. python批量导入MongoDB数据库
  3. .NET Core采用的全新配置系统[7]: 将配置保存在数据库中
  4. JavaOne 2016 Essentials:7个您不容错过的事件和会话
  5. 一个不能进入系统的小问题——供远程为别人解决问题时参考。
  6. 主窗口刷新,子窗口闪烁
  7. 近期生活中将会发生的一点变化!
  8. Vue框架学习笔记一
  9. 续费Enom域名的三种办法
  10. Lead-follower因子:新闻共现股票收益的关联性研究
  11. 不只卖电脑的联想,还有什么“新看点”?
  12. 长话短说:学习网络安全自学好还是报培训班?
  13. 为何谷歌围棋AI AlphaGo可能会把李世石击溃
  14. 项目实战:借鉴Android API源码(Splitter-split和TextView-setText),不惧NullPointerException(文末彩蛋)
  15. python数据库mysql_python数据库-MySQL与python的交互(52)
  16. 网络visca控制协议_visca协议
  17. Unity3D 取消发布游戏启动时的设置窗口并窗口化运行
  18. 安装打印机时提示操作无法完成(错误0×00000709)
  19. 车道线检测-从单车道到多车道的车道线检测(三)
  20. 鱼眼摄像头的畸变矫正方法-python+opencv

热门文章

  1. 2022QS榜单发布!计算机专业排名MIT霸榜,清华排15,北大跌出TOP20
  2. 电子设计教程7:线性稳压电源的工作原理
  3. 国密SM算法有哪些?
  4. SAP的系统审计以及SM19的使用 1
  5. 用计算机对人造卫星,人造卫星轨迹计算主要涉及计算机应用中的______
  6. 动态规划-leetcode#213 打家劫环形舍
  7. SCI收录的期刊查询
  8. 学籍管理html,河南学籍管理系统
  9. python 残差图_利用pyFOAM残差的输出
  10. js 文件下载请求两种方式