MySQL临时表

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;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值