• 售前

  • 售后

热门帖子
入门百科

MySQL临时表的简单用法先容

[复制链接]
真好210 显示全部楼层 发表于 2021-10-26 12:56:43 |阅读模式 打印 上一主题 下一主题
MySQL 暂时表在我们必要生存一些暂时数据时黑白常有用的。暂时表只在当前毗连可见,当关闭毗连时,Mysql会自动删除表并释放全部空间。
暂时表在MySQL 3.23版本中添加,如果你的MySQL版本低于 3.23版本就无法利用MySQL的暂时表。不过现在一般很少有再利用这么低版本的MySQL数据库服务了。
MySQL暂时表只在当前毗连可见,如果你利用PHP脚原来创建MySQL暂时表,那每当PHP脚本实行完成后,该暂时表也会自动烧毁。
如果你利用了其他MySQL客户端步伐毗连MySQL数据库服务器来创建暂时表,那么只有在关闭客户端步伐时才会烧毁暂时表,固然你也可以手动烧毁。
实例
以下展示了利用MySQL 暂时表的简单实例,以下的SQL代码可以实用于PHP脚本的mysql_query()函数。
  1. mysql> CREATE TEMPORARY TABLE SalesSummary (
  2.   -> product_name VARCHAR(50) NOT NULL
  3.   -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
  4.   -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
  5.   -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
  6. );
  7. Query OK, 0 rows affected (0.00 sec)
  8. mysql> INSERT INTO SalesSummary
  9.   -> (product_name, total_sales, avg_unit_price, total_units_sold)
  10.   -> VALUES
  11.   -> ('cucumber', 100.25, 90, 2);
  12. mysql> SELECT * FROM SalesSummary;
  13. +--------------+-------------+----------------+------------------+
  14. | product_name | total_sales | avg_unit_price | total_units_sold |
  15. +--------------+-------------+----------------+------------------+
  16. | cucumber   |   100.25 |     90.00 |        2 |
  17. +--------------+-------------+----------------+------------------+
  18. 1 row in set (0.00 sec)
复制代码
当你利用 SHOW TABLES命令显示数据表列表时,你将无法看到 SalesSummary表。
如果你退出当前MySQL会话,再利用 SELECT命令来读取原先创建的暂时表数据,那你会发现数据库中没有该表的存在,因为在你退出时该暂时表已经被烧毁了。
删除MySQL 暂时表
默认情况下,当你断开与数据库的毗连后,暂时表就会自动被烧毁。固然你也可以在当前MySQL会话利用 DROP TABLE 命令来手动删除暂时表。
以下是手动删除暂时表的实例:
  1. mysql> CREATE TEMPORARY TABLE SalesSummary (
  2.   -> product_name VARCHAR(50) NOT NULL
  3.   -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
  4.   -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
  5.   -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
  6. );
  7. Query OK, 0 rows affected (0.00 sec)
  8. mysql> INSERT INTO SalesSummary
  9.   -> (product_name, total_sales, avg_unit_price, total_units_sold)
  10.   -> VALUES
  11.   -> ('cucumber', 100.25, 90, 2);
  12. mysql> SELECT * FROM SalesSummary;
  13. +--------------+-------------+----------------+------------------+
  14. | product_name | total_sales | avg_unit_price | total_units_sold |
  15. +--------------+-------------+----------------+------------------+
  16. | cucumber   |   100.25 |     90.00 |        2 |
  17. +--------------+-------------+----------------+------------------+
  18. 1 row in set (0.00 sec)mysql> DROP TABLE SalesSummary;mysql> SELECT * FROM SalesSummary;ERROR 1146: Table 'RUNOOB.SalesSummary' doesn't exist
复制代码
用查询直接创建暂时表的方式:
  1. CREATE TEMPORARY TABLE 临时表名 AS
  2. (
  3.   SELECT * FROM 旧的表名
  4.   LIMIT 0,10000
  5. );
复制代码
下面是一些补充

当工作在非常大的表上时,你可能偶尔必要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个暂时表可能更快些,然后在这些表运行查询。
创建暂时表很容易,给正常的CREATE TABLE语句加上TEMPORARY关键字:
  1. CREATE TEMPORARY TABLE tmp_table (
  2.   name VARCHAR(10) NOT NULL,
  3.   value INTEGER NOT NULL
  4. )
复制代码
暂时表将在你毗连MySQL期间存在。当你断开时,MySQL将自动删除表并释放所用的空间。固然你可以在仍然毗连的时间删除表并释放空间。
DROP TABLE tmp_table
如果在你创建名为tmp_table暂时表时名为tmp_table的表在数据库中已经存在,暂时表将有须要屏蔽(隐藏)非暂时表tmp_table。

如果你声明暂时表是一个HEAP表,MySQL也答应你指定在内存中创建它:
  1. CREATE TEMPORARY TABLE tmp_table (
  2.   name VARCHAR(10) NOT NULL,
  3.   value INTEGER NOT NULL
  4. ) TYPE = HEAP
复制代码
因为HEAP表存储在内存中,你对它运行的查询可能比磁盘上的暂时表快些。然而,HEAP表与一般的表有些差别,且有自身的限定。详见MySQL参考手册。

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

1、暂时表再断开于mysql的毗连后体系会自动删除暂时表中的数据,但是这只限于用下面语句创建的表:
定义字段:
  1. CREATE TEMPORARY TABLE tmp_table (
  2.   name VARCHAR(10) NOT NULL,
  3.   value INTEGER NOT NULL
  4. )
复制代码
2)直接将查询结果导入暂时表
  1. CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name
复制代码
2、别的mysql也答应你在内存中直接创建暂时表,因为是在内存中全部速度会很快,语法如下:
  1. CREATE TEMPORARY TABLE tmp_table (
  2.   name VARCHAR(10) NOT NULL,
  3.   value INTEGER NOT NULL
  4. ) TYPE = HEAP
复制代码
3、从上面的分析可以看出暂时表的数据是会被清空的,你断开了毗连就会被自动清空,但是你步伐中不可能每发行一次sql就毗连一次数据库吧(如果是这样的话,那就会出现你担心的标题,如果不是就没有标题),因为只有断开数据库毗连才会被清空数据,在一个数据库毗连里面发行多次sql的话体系是不会自动清空暂时表数据的。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作