临时表在 MySQL 中用于存储会话期间的中间结果,具有会话隔离和自动清理特性,适用于复杂查询、阶段性计算和提升性能,通过 CREATE TEMPORARY TABLE 创建,仅当前连接可用,断开后自动删除,不支持外键和全文索引,且优先于同名永久表被访问,适合封装逻辑和避免重复扫描大表,但不可共享且可能增加临时空间压力。

临时表在 MySQL 中主要用于存储中间结果,特别是在复杂查询或数据处理过程中。它只在当前会话中可见,当会话结束时自动删除,不会影响数据库的其他部分。这种特性使得临时表非常适合用于阶段性计算、避免重复查询和提升性能。
临时表的作用
临时表的核心价值在于其“临时性”和“会话隔离”:
- 保存中间计算结果,比如多步聚合或连接操作中的阶段性数据
- 避免频繁访问大表,提高复杂查询的执行效率
- 在存储过程或函数中封装逻辑,使代码更清晰
- 不同用户可以使用同名临时表而互不干扰
创建与使用临时表
使用 CREATE TEMPORARY TABLE 语句创建临时表:
CREATE TEMPORARY TABLE temp_sales (id INT, amount DECIMAL(10,2), sale_date DATE );
之后可像普通表一样进行插入和查询:
INSERT INTO temp_sales VALUES (1, 150.00, '2024-01-10'); SELECT * FROM temp_sales;
该表仅在当前连接中存在,断开后自动清除。
临时表的限制与注意事项
虽然方便,但使用时需注意以下几点:
- 不能与其他会话共享数据,不适合做数据交换
- 不支持外键约束和全文索引
- 重名时优先访问临时表而非同名永久表
- 大量使用可能增加内存或磁盘临时空间压力
适用场景示例
例如在分析订单数据时,先将符合条件的订单存入临时表:
CREATE TEMPORARY TABLE temp_orders AS SELECT order_id, customer_id, total FROM orders WHERE order_date BETWEEN '2024-01-01' AND '2024-01-31';
然后基于此表做多次统计,避免重复扫描原表。
基本上就这些。临时表用好了能简化逻辑、提升性能,但记得它是会话私有的,别指望它持久化数据。