MySQL 临时表
用 TEMPORARY TABLE 存会话级中间结果。
Key Points临时表只对当前连接可见、断开即销毁,适合复杂报表的中间计算。
创建与使用
SQL
CREATE TEMPORARY TABLE tmp_top_users (
id INT, username VARCHAR(50), cnt INT
);
INSERT INTO tmp_top_users
SELECT u.id, u.username, COUNT(*) AS cnt
FROM users u JOIN orders o ON o.user_id = u.id
GROUP BY u.id ORDER BY cnt DESC LIMIT 10;
SELECT * FROM tmp_top_users;Output
+----+----------+-----+
| id | username | cnt |
+----+----------+-----+
| 1 | alice | 2 |
+----+----------+-----+A temp table shadows a normal table of the same name for that session only. It exists only in the creating connection and is dropped on disconnect, so no manual DROP and no cross-session leaks.
创建与使用
SQL
CREATE TEMPORARY TABLE tmp_top_users (
id INT, username VARCHAR(50), cnt INT
);
INSERT INTO tmp_top_users
SELECT u.id, u.username, COUNT(*) AS cnt
FROM users u JOIN orders o ON o.user_id = u.id
GROUP BY u.id ORDER BY cnt DESC LIMIT 10;
SELECT * FROM tmp_top_users;Output
+----+----------+-----+
| id | username | cnt |
+----+----------+-----+
| 1 | alice | 2 |
+----+----------+-----+临时表与普通表同名时会「遮蔽」普通表——当前会话看到的是临时表。它只在创建它的连接里存在,连接关闭自动删除,不会污染其它会话,也省了手动 DROP。