现在的位置: 首页 > 综合 > 正文

“显示提交”和”隐式提交”

2013年12月11日 ⁄ 综合 ⁄ 共 955字 ⁄ 字号 评论关闭
    我发现有人经常 “滥用” 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 语句执行后,数据都存在 共享池。提供给其他人查询相同的数据时,直接在共享池中提取,不用再去数据库中提取,提高了数据查询的速度。
    不过大家要注意:所谓提供给其他人查询相同的数据,有很多的条件限制,不在本篇中详说,请在“共享池的使用注意”一文中在详细说明。
【上篇】
【下篇】

抱歉!评论已关闭.