oracle、mysql临时表区别

眉间皱痕 提交于 2019-12-27 05:39:56

oracle临时表

临时表分类:

  1. 会话级临时表(session表)

  2. 事务级临时表


会话级临时表(session表)

会话级临时表是指临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,Oracle自动清除临时表中数据

  • 创建方式
Create Global Temporary table Table_Name
(
id_ int
)
On Commit Preserve Rows;

或者从另外一个表创建:

create global temporary table Table_Name on commit rpeserve rows as 
select id from Table_Name1;

测试:

insert into Table_Name(id_) values(12);

当前会话窗口查询:
在这里插入图片描述
另起一个窗口查询:
在这里插入图片描述

从当前会话窗口插入数据能查询到,另起一个会话创建查询不到数据,退出当前会话自动清空数据(表结构保留)

删除临时表需要注意的是有时候会出现ORA-14452,意思是有资源还在占用临时表,无法删除。需要找到临时表的会话,手动杀掉

  • 具体操作:
-- 查找还在使用临时表的会话
SELECT sid, serial# 
FROM v$session 
WHERE sid = (SELECT sid FROM v$lock 
WHERE id1 = (SELECT object_id  FROM dba_objects 
WHERE object_name = UPPER('临时表名')));
-- 使用上面查出的sid和serial#,杀掉会话
ALTER system kill session 'sid,serial#';

事物级临时表

事务级临时表是指临时表中的数据只在事务生命周期中存在。

  • 创建方式
create global temporary table Table_Name
(
id_ int
)
on Commit Delete Rows;

测试

insert into Table_Name(id_) values(123)
select * from Table_Name

不提交事物:
在这里插入图片描述
执行commit后再次查询:
在这里插入图片描述

当你执行commit或rollback操作,再次查询表内的数据就查询不到了(表结构保留)

Mysql临时表

mysql临时表只在当前连接可见,当这个连接关闭的时候,会自动drop。和oracle会话级别临时表有些类似,不同的是表只对当前会话有效,即其他会话查询不像oracle查询不到数据,而是直接报表不存在,而且当前会话结束不会保留表结构,会直接drop掉表

创建方式:

create temporary table tmp_table(
id_ int
);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!