mysql 临时表 会话级_Oracle 学习系列之二(会话与事务级临时表和dual表 )

本文详细介绍了Oracle和MySQL中的临时表,包括会话级临时表和事务级临时表的创建、使用及清理规则。举例展示了如何在事务中操作临时表,并探讨了临时表在大表分割、解决并行问题和数据缓存等场景的应用。同时,讨论了特殊表dual的作用及其在查询当前日期和执行计算中的用途。
摘要由CSDN通过智能技术生成

一、 会话临时表

--创建会话临时表

create global temporary table tmp_user_session(user_id int, user_name varchar2(20),user_email varchar2(30))

--这句表示 当事务提交时 保留数据

on commit preserve rows

--向临时表中插入数据

insert into tmp_user_session(user_id,user_name,user_email) values(1,'孙业宝','948987600@qq.com')

insert into tmp_user_session(user_id,user_name,user_email) values(1,'王丽莎','934560@qq.com')

commit

--查询 有数据

select * from tmp_user_session

--重新打开 一个sql窗口 再次查询 则无数据了 select * from tmp_user_session 说明此插入的数据 只为本窗口会话存在

二、创建事务临时表

--创建事务临时表

create global temporary table tmp_users_transaction (user_id int,user_name varchar2(20),user_email varchar2(30))

--这句表示 当事务提交时 删除数据

on commit delete rows

--向临时表中插入数据

insert into tmp_users_transaction(user_id,user_name,user_email) values(1,'孙业宝','948987600@qq.com');

insert into tmp_users_transaction(user_id,user_name,user_email) values(1,'王丽莎','934560@qq.com')

--查询 有数据

select * from tmp_users_transaction

--提交下语句 或者回滚事务 rollback  再次查询   select * from tmp_users_transaction  就没有数据了 因为事务临时表 就是在事务提交时 就数据清空了

commit;rollback;

--查看临时表的表空间,其实他们的表空间为空

select table_name, tablespace_name

from user_tables

where table_name = 'T_USERS'

or table_name = 'TMP_USERS_SESSION'

or table_name = 'TMP_USERS_TRANSACTION'

临时表的应用场景

1.大表分割

众所周知,为表创建合适的索引可以在很大程度上提高数据查询的速度。但是当某个表的数据量相当大,例如数据量为亿级时,那么创建索引将会花费大量的时间,而且,查询大的索引表,与直接查询数据表相比,在性能上几乎没有任何优势,此时,一个常用的方法就是分割大表,例如:将大表分割为多个小的临时表,然后对这些小表进行相应操作,最后对所有查询结果进行综合处理。

2.解决并行问题

当多个进程同时对某张表进行操作时,往往会出现并行问题。

3.作为数据缓存

在程序段,可能需要对若干数据进行复杂运算。此时,可以创建一个临时表,并将这些数据存储在临时表中。因为可以像操作普通表一样操作临时表,这样,许多函数和sql语句都可以用来处理这些数据。

三、特殊表 dual

特殊表 dual 该表是每个数据库创建时默认生成的。该表仅有一列一行,在数据库开发中有着非常特殊的作用。

1.分析dual表 执行

select * from dual可以看出dual 只有一行一列。

2. dual表的应用场景

在oracle数据库中,dual表实际上是作为一个虚表的概念存在的。也就是说dual表存在的意义并非为了存储数据。更多的时候,dual表用来作为 from的源表。因为oracle的查询语句必须满足 select * from table name 语法格式,其中的from所指向的表是必须的,所以即使某些数据不属于任何表,也必须有一个强制的表名。dual表即可用做这个强制的虚表。

--查看dual表结构

select * from dual

--查询数据当前日期

select sysdate from dual

--计算结果

select 3*4-3 as results ,8-9 as plus from dual

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值