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,.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;
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202428.html原文链接:https://javaforall.net
