Oracle 临时表总结

临时表

临时表就是用来暂时保存临时数据(亦或叫中间数据)的一个数据库对象
临时表只对当前会话或事务可见。每个会话只能查看和修改自己的数据
临时表在数据字典中没有指定其表空间

用途: 详情见ORACLE临时表总结

什么时候使用临时表?用临时表和用中间表有啥区别呢?

我觉得是在需要的时候应用,下面是David Dai关于临时表的一个应用说明,我觉得非常形象的说明了临时表的应用场景:对于一个电子商务类网站,不同消费者在网站上购物,就是一个独立的 SESSION,选购商品放进购物车中,最后将购物车中的商品进行结算。也就是说,必须在整个SESSION期间保存购物车中的信息。同时,还存在有些消费者,往往最终结账时放弃购买商品。如果,直接将消费者选购信息存放在最终表(PERMANENT)中,必然对最终表造成非常大的压力。因此,对于这种案例,就可以采用创建临时表(ON COMMIT PRESERVE ROWS)的方法来解决。数据只在 SESSION 期间有效,对于结算成功的有效数据,转移到最终表中后,ORACLE自动TRUNCATE 临时数据;对于放弃结算的数据,ORACLE 同样自动进行 TRUNCATE ,而无须编码控制,并且最终表只处理有效订单,减轻了频繁的DML操作的压力。

1:当处理某一批临时数据,需要多次DML操作时(插入、更新等),建议使用临时表。

2:当某些表在查询里面,需要多次用来做连接时。(为了获取目标数据需要关联A、B、C, 同时为了获取另外一个目标数据,需要关联D、B、C…)

关于临时表和中间表(NOLOGGING,保存中间数据,使用完后删除)那个更适合用来存储中间数据,我个人更倾向于使用临时表,而不建议使用中间表。

会话和事务的区别

会话,指的是客户端连接到服务器的一个上下文环境。它是一个逻辑概念。你比如,创建了一个会话,这个会话记录了客户端的ip,客户端的用户名等信息。以及发布的sql命令的游标等。这些信息都是存储在内存中的。oracle实例赋予一个id(session——id)来逻辑地把这些信息组织在一起。
事务,指的是你在当前会话中要做的一件事情,而这件事情包括好多步操作。任何一步操作失败,你要做的整个这个事情也会失败。这就是事务的原子性。
会话和事务其实在概念上没有多大的联系,所以也就没有什么区别之分。给你举个例子来说明会话与事物的一个大概关系。
比如,你要给你家人拜年(这是一个事物)。前提是你必须先联系上你的家人,假如你打电话给你家人,当接通时你们就产生了一个会话,然后你就可以拜年了(就可以进行事务了)。
由此可见,事务的运行必须建立在会话的基础上,但是有了会话不一定有事务(可以空闲,比如你接通了电话,什么都不说)。

COMMIT和ROLLBACK

username pwd
admin 123456
写一条sql
update usertable set pwd=‘123’ where pwd=‘123456’;
执行结果
username pwd
admin 123456
如果这样写
update usertable set pwd=‘123’ where pwd=‘123456’;
commit;
执行结果
username pwd
admin 123

COMMIT即提交,表示这个事务的所有操作都执行成功,COMMIT告诉系统,数据库要进入一个新的正确状态,该事务对数据库的所有更新都要确保不因数据库的宕机而丢失。ROLLBACK即回退或回滚,表示事务中有执行失败的操作,这些操作必须被撤销,ROLLBACK告诉系统,已发生错误,数据库可能处在不正确的状态,该事务对数据库的部分或所有更新必须被撤销。

在Oracle数据库中,COMMIT和ROLLBACK都属于事务控制语言(Transactional Control Language,TCL),TCL用于维护数据的一致性,包括COMMIT、ROLLBACK、SAVEPOINT、ROLLBACK TO SAVEPOINT、SET TRANSACTION、SET CONSTRAINT等语句。其中,COMMIT语句用于确认和提交已经进行的数据库改变;ROLLBACK用于撤销已经进行的数据库改变;SAVEPOINT语句则用于设置保存点,以取消部分数据库改变,ROLLBACK命令会结束一个事务,但ROLLBACK TO SAVEPOINT不会;SET TRANSACTION设定一个事务的属性;SET CONSTRAINT指定是在每个DML语句之后、还是在事务提交后,执行可延迟完整性约束检查。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涛涛之海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值