MySQL临时表的简单用法介绍

作者:奋斗吧_攻城狮 时间:2024-01-13 10:03:56 

MySQL 临时表在我们需要保存一些临时数据时是非常有用的。临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。

临时表在MySQL 3.23版本中添加,如果你的MySQL版本低于 3.23版本就无法使用MySQL的临时表。不过现在一般很少有再使用这么低版本的MySQL数据库服务了。

MySQL临时表只在当前连接可见,如果你使用PHP脚本来创建MySQL临时表,那每当PHP脚本执行完成后,该临时表也会自动销毁。

如果你使用了其他MySQL客户端程序连接MySQL数据库服务器来创建临时表,那么只有在关闭客户端程序时才会销毁临时表,当然你也可以手动销毁。

实例

以下展示了使用MySQL 临时表的简单实例,以下的SQL代码可以适用于PHP脚本的mysql_query()函数。


mysql> CREATE TEMPORARY TABLE SalesSummary (
 -> product_name VARCHAR(50) NOT NULL
 -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
 -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
 -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO SalesSummary
 -> (product_name, total_sales, avg_unit_price, total_units_sold)
 -> VALUES
 -> ('cucumber', 100.25, 90, 2);

mysql> SELECT * FROM SalesSummary;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber   |   100.25 |     90.00 |        2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)

当你使用 SHOW TABLES命令显示数据表列表时,你将无法看到 SalesSummary表。

如果你退出当前MySQL会话,再使用 SELECT命令来读取原先创建的临时表数据,那你会发现数据库中没有该表的存在,因为在你退出时该临时表已经被销毁了。

删除MySQL 临时表

默认情况下,当你断开与数据库的连接后,临时表就会自动被销毁。当然你也可以在当前MySQL会话使用 DROP TABLE 命令来手动删除临时表。

以下是手动删除临时表的实例:


mysql> CREATE TEMPORARY TABLE SalesSummary (
 -> product_name VARCHAR(50) NOT NULL
 -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
 -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
 -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO SalesSummary
 -> (product_name, total_sales, avg_unit_price, total_units_sold)
 -> VALUES
 -> ('cucumber', 100.25, 90, 2);

mysql> SELECT * FROM SalesSummary;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber   |   100.25 |     90.00 |        2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)
mysql> DROP TABLE SalesSummary;
mysql> SELECT * FROM SalesSummary;
ERROR 1146: Table 'RUNOOB.SalesSummary' doesn't exist

用查询直接创建临时表的方式:


CREATE TEMPORARY TABLE 临时表名 AS
(
 SELECT * FROM 旧的表名
 LIMIT 0,10000
);

下面是一些补充

当工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后在这些表运行查询。

创建临时表很容易,给正常的CREATE TABLE语句加上TEMPORARY关键字:


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

临时表将在你连接MySQL期间存在。当你断开时,MySQL将自动删除表并释放所用的空间。当然你可以在仍然连接的时候删除表并释放空间。

DROP TABLE tmp_table

如果在你创建名为tmp_table临时表时名为tmp_table的表在数据库中已经存在,临时表将有必要屏蔽(隐藏)非临时表tmp_table。

如果你声明临时表是一个HEAP表,MySQL也允许你指定在内存中创建它:


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

因为HEAP表存储在内存中,你对它运行的查询可能比磁盘上的临时表快些。然而,HEAP表与一般的表有些不同,且有自身的限制。详见MySQL参考手册。

正如前面的建议,你应该测试临时表看看它们是否真的比对大量数据库运行查询快。如果数据很好地索引,临时表可能一点不快。

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


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

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


CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name

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


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

3、从上面的分析可以看出临时表的数据是会被清空的,你断开了连接就会被自动清空,但是你程序中不可能每发行一次sql就连接一次数据库吧(如果是这样的话,那就会出现你担心的问题,如果不是就没有问题),因为只有断开数据库连接才会被清空数据,在一个数据库连接里面发行多次sql的话系统是不会自动清空临时表数据的。

来源:https://blog.csdn.net/yu757371316/article/details/53034075

标签:MySQL,临时表
0
投稿

猜你喜欢

  • python使用matplotlib显示图像失真的解决方案

    2021-03-30 22:31:02
  • 详解vue页面首次加载缓慢原因及解决方案

    2024-05-25 15:19:45
  • Jupyter notebook快速入门教程(推荐)

    2021-02-13 13:53:57
  • python 装饰器功能以及函数参数使用介绍

    2022-04-03 05:12:32
  • 浅谈python下tiff图像的读取和保存方法

    2021-11-23 04:10:08
  • javscript 数组扁平化的实现

    2024-04-28 10:18:49
  • Vue子组件监听父组件值的变化

    2023-07-02 16:56:00
  • Python脚本Selenium及页面Web元素定位详解

    2023-06-14 12:21:10
  • 基于Python实现扑克牌面试题

    2023-11-21 18:05:21
  • Python生成rsa密钥对操作示例

    2021-08-25 03:43:31
  • 18个超棒的Web和移动应用开发框架

    2011-03-31 17:04:00
  • MySql使用skip-name-resolve解决外网链接客户端过慢问题

    2024-01-26 16:07:35
  • Python boxplot 用法详解

    2021-10-24 07:56:11
  • mysql存储过程 在动态SQL内获取返回值的方法详解

    2024-01-19 01:22:53
  • centos7.4系统中yum源安装mysql 5.6

    2024-01-14 16:38:19
  • ORM框架之Dapper简介和性能测试

    2024-05-03 15:30:44
  • Python 里最强的地图绘制神器

    2023-07-17 12:36:43
  • 深入理解Vue 的条件渲染和列表渲染

    2024-04-09 10:46:37
  • mysqld_safe启动脚本源码阅读、分析

    2024-01-22 14:33:21
  • 利用nohup来开启python文件的方法

    2023-05-08 07:51:29
  • asp之家 网络编程 m.aspxhome.com