MySQL临时表

MySQL 临时表分为“内存临时表”和“磁盘临时表”,其中内存临时表使用 MySQL 的 MEMORY 存储引擎,磁盘临时表使用 MySQL 的 MyISAM 存储引擎;一般情况下,MySQL 会先创建内存临时表,但内存临时表超过配置指定的值后,MySQL 会将内存临时表导出到磁盘临时表。
MySQL 临时表在我们需要保存一些临时数据时是非常有用的。临时表只在当前连接可见,当关闭连接时,Mysql 会自动删除表并释放所有空间。

创建临时表

  1. 给 CREATE TABLE 语句加上 TEMPORARY 关键字即可创建临时表
1
2
3
4
CREATE TEMPORARY TABLE tmp_table (
name VARCHAR(10) NOT NULL,
value INTEGER NOT NULL
);
  1. 直接将查询结果导入并创建临时表
1
CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name

删除临时表

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

1
DROP TABLE tmp_table;

应用场景

  • 应用场景 1:你在短期内有很多 DML 操作,比如京东淘宝亚马逊的购物车表,把东西放购物车(insert),变更数量(update),删除商品(delete),一旦结算金钱后,这些数据就要清掉,这时需要用临时表。
  • 应用场景 2:在导出数据时,你可能不想导完整的数据库,或者表,你可能只想要导出符合某些条件的数据,那么你可以创建临时表,把 select 语句插入到临时表,接着导出这个临时表,导完以后通过结束 session 或者事务的方式,让这些没用的数据自动清理掉。
  • 应用场景 3:你在写存储过程时,有很多的连接,比如你需要连接 A,B,C,D,E,F,G,H 那么多张表,才能得到你的结果表,同时做连接的消耗太大,你可以先 A,B,C 连接的结果,放在临时表,接着再把这张临时表,跟 D,E,F 连接,作为新的结果放在临时表,接着再把临时表与 G,H 连接,最后得到临时表数据,一次插入到结果表(永久表)。
    原文

延伸阅读

什么情况下会用到临时表
官方手册