首先来看看官网给的有关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

FROM

top_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))

BEGIN

DECLARE 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) THEN

SET @table_exists = 0;

ELSE

SET @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;

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

mysql temporary_MySQL中临时表(TEMPORARY)相关推荐

  1. mysql怎么删除临时表里的数据_谈谈MySQL数据库中临时表的应用

    MySQL在很多情况下都会用到临时表总结一下什么时候会用到临时表 什么是临时表MySQL用于存储一些中间结果集的表临时表只在当前连接可见当关闭连接时Mysql会自动删除表并释放所有空间. 以下讨论的是 ...

  2. mysql temporary_MySQL中的两种临时表

    http://mysql.taobao.org/monthly/2016/06/07/ 外部临时表 通过CREATE TEMPORARY TABLE 创建的临时表,这种临时表称为外部临时表.这种临时表 ...

  3. mysql temporary_MySQL内部临时表(Internal Temporary Table)

    当某些SQL命令在MySQL数据库中被执行的时候,它可能需要先创建一些内部的临时表来完成比较复杂的排序或分组查询.MySQL的临时表分为 in-memory 和 on-disk 两种. 如有可能,My ...

  4. mysql drop temporary_mysql存储过程----临时表 temporary

    在存储过程中可以使用临时表,下面有一个分割字符串的例子 语法 1.创建:create temporary table 表名(列信息); 2.删除:drop table 表名; 3.清空:truncat ...

  5. mysql temporary_MYSQL中的CREATE TEMPORARY TABLE

    记录一下今天的一个BUG FIXING.早上收到一个BUG,说有一个到模块A的调用B,多执行几次以后就会出错.错误信息显示SQL ERROR.因为CDC SBE就我最近改过模块A的代码,就把BUG塞给 ...

  6. mysql reopen table_mysql 临时表 cann't reopen解决方案

    当你创建临时表的时候,你可以使用temporary关键字.如:复制代码 代码如下:create temporary table tmp_table(name varchar(10) not null, ...

  7. mysql 中有没有临时表_MySQL 中的两种临时表

    来源:阿里云RDS - 数据库内核组 链接:http://mysql.taobao.org/monthly/2016/06/07/ 外部临时表 通过CREATE TEMPORARY TABLE 创建的 ...

  8. mysql语句创建临时表并存入数据_mysql实例:在存储过程中创建临时表并储存数据...

    在mysql存储过程中创建临时表,并保存数据到该表,然后根据存储过程调用的例子. 是学习mysql存储过程的好例子,值得参考. 代码: mysql> mysql> CREATE TABLE ...

  9. mysql临时表 清空_在数据库中临时表什么时候会被清除呢

    展开全部 我们仍使用 实验 05 中的环境,略去准备数据的过程. 我们仍然使用两个会话,62616964757a686964616fe59b9ee7ad9431333433646439一个会话 run ...

最新文章

  1. 域控服务器发生w32time错误
  2. EasyTable.js,令html的table布局变得非常简单!
  3. gpio驱动广播Android,[RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED【转】
  4. 设计模式(三):观察者模式与发布/订阅模式区别
  5. 关于为什么我推荐大家看vue代码的随想
  6. jvmti_拥有您的堆:使用JVMTI迭代类实例
  7. 具有瞬态属性的视图对象的钝化和激活
  8. 【Python】圆周率的计算
  9. 数据库-MySQL-Java数据库连接-JDBC
  10. linux根目录缩减非lvm,vmware下linux非LVM管理的根目录扩容经历
  11. mysql主从 毫秒_MySQL主从数据库同步延迟问题解决(转)
  12. Linux中usb设置burst,Re: 关于IMX6UL第二个USB接口在linux驱动的问题
  13. Markdown中的特殊符号
  14. Java素数怎么判断
  15. 怎么查二手华为手机价格
  16. Pytorch入门+实战系列五:Pytorch情感分类
  17. ei会议和ei源刊的区别_Ei期刊和ei会议论文有哪些区别
  18. 02【代词】人称代词,指示代词,不定代词?
  19. 通行宝深交所上市:市值84亿 腾讯云与上汽是股东
  20. mysql数据中包含不间断空格(ascii值为194和160)解决办法

热门文章

  1. 一个完整直播app功能分析
  2. 腾讯自选股任务 青龙脚本
  3. 微前端框架 之 qiankun 从入门到源码分析
  4. matlab转换为exe文件,matlab GUI编程及转换为独立运行的exe文件
  5. 计算机中真值的概念,真值和机器数概念
  6. 用上这门黑科技,运维从此不背锅!
  7. 有N步台阶,每次可以走1步或者2步,计算有多少种走法
  8. MySQL实现自增的序列(Sequence)
  9. horizon层层注册
  10. Find_in_set()函数的使用及in()用法详解