1.使用场景
MySQL临时表用来保存一些临时数据。
例如,当执行下面这条SQL语句
update
employee
set
salary = salary + 500
where
id in(select id from employee where salary < 8000);
会报错
-- 错误代码: 1093
-- You can't specify target table 'employee' for update in FROM clause
这时可以使用临时表
DROP TEMPORARY TABLE IF EXISTS tmp_sal;
-- 创建临时表
CREATE TEMPORARY TABLE tmp_sal AS
SELECT
*
FROM
employee
WHERE
salary < 8000;
-- 从临时表中查询数据
UPDATE
employee
SET
salary = salary + 500
WHERE
id IN(SELECT id FROM tmp_sal);
注:MySQL临时表一般配合MySQL存储过程一起使用(PS:其他场景本人目前还没用到过→ →)。
2.作用域
(1)临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。
(2)如果是使用编程语言(PHP、Java等)的脚本来创建临时表,则当脚本执行完成后,该临时表也会自动销毁。
(3)如果是使用的其他MySQL客户端程序连接MySQL数据库服务器来创建临时表,那么只有在关闭客户端程序时才会销毁临时表,当然你也可以手动销毁(到下面再说)。
(4)使用 SHOW TABLES 命令是无法查看临时表的。
3.创建临时表
方式一,类似于创建普通表:
DROP TEMPORARY TABLE IF EXISTS salary_analy;
-- 创建临时表
CREATE TEMPORARY TABLE salary_analy(
depart_name VARCHAR(10),
date_year INT,
date_month TINYINT,
total_salary DECIMAL(12,2),
avg_salary DECIMAL(7,2)
);
-- 插入数据
INSERT INTO salary_analy
(depart_name,date_year,date_month,total_salary,avg_salary)
VALUES
('销售一部',2018,7,500000.00,30000.00);
-- 查看
SELECT * FROM salary_analy;
方式二,将查询结果作为临时表(使用 AS 关键字):
DROP TEMPORARY TABLE IF EXISTS salary_analy;
CREATE TEMPORARY TABLE salary_analy AS
SELECT
depart,date_year,SUM(salary) sum_sal,AVG(salary) avg_sal
FROM
salary
GROUP BY
depart,date_year;
4.手动删除临时表
手动删除临时表和删除普通表一样
DROP TABLE salary_analy;
-- 或
DROP TEMPORARY TABLE salary_analy;