"显示提交"和"隐式提交"

本文解析了Oracle数据库中DML与DDL语句的区别,重点讲解了COMMIT与ROLLBACK的使用方式及注意事项,帮助读者理解如何正确地管理事务。
    我发现有人经常 “滥用” ORACLE 中的 COMMIT 和 ROLLBACK 的用法。
    首先,大家要清楚 COMMIT / ROLLBACK ,都是用在执行 DML 语句之后的。所谓 DML 语句就是 INSERT / DELETE / UPDATE / SELECT ,而 CREATE TABLE / VIEW 之类的语句,是 DDL。
    DML 语句,执行完之后,处理的数据,都会放在回滚段中(除了 SELECT 语句),等待用户进行提交(COMMIT)或者回滚 (ROLLBACK),当用户执行 COMMIT / ROLLBACK  后,放在回滚段中的数据就会被删除。
    所有的 DML 语句都是要显式提交了,所谓“显式提交”,就是要执行 COMMIT / ROLLBACK  。
    而其他的诸如 DDL 语句的,都是隐式提交的。就是说,不用进行 COMMIT / ROLLBACK  。在运行那些非 DML 语句后,ORACLE 已经进行了隐式提交,例如 CREATE TABLE,在运行脚本后,表已经建好了,并不在需要你再进行显式提交

---------------------
   说白了,对Oracle来说,分为DML(增删改查)和DDL(建表删除表)两种。但凡Oracle碰到DDL语句,实际上是做的如下动作:
   {insert into dba_XXX  
   commit}  
    若不插入字典,后面的动作会出现字典不匹配的情况,所以一Commit必然会将DDL语句之前的动作统一提交,假如这个情况出现在存储过程                 中,则DDL前面的增删改全部被提交了,会出现问题。所以DDL语句最好放在其它地方,以我的程序为例,建表删表是放在日结中。

   对SqlServer来说,建表删表这些动作,没有隐式提交的提交,是由事务启动开始一直到结束统一完成的,增删改和建表删表在一起提交,所以无需   
   担心。


    所以那些对显式提交有疑问的人,希望这篇文章对大家有用。


 
 
 
    PS:SELECT 语句执行后,数据都存在 共享池。提供给其他人查询相同的数据时,直接在共享池中提取,不用再去数据库中提取,提高了数据查询的速度。
    不过大家要注意:所谓提供给其他人查询相同的数据,有很多的条件限制,不在本篇中详说,请在“共享池的使用注意”一文中在详细说明。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值