数据库基础知识四:显示提交与隐式提交

在数据库的插入、删除和修改操作时,只有当事务在提交到数据库时才算完成。在事务提交前,只有操作数据库的这个人才能有权看到所做的事情,别人只有在最后提交完成后才可以看到。
提交数据有三种类型:显式提交、隐式提交及自动提交。
(1) 显式提交
用COMMIT命令直接完成的提交为显式提交。其格式为:

SQL>COMMIT;

(2) 自动提交
若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,
系统将自动进行提交,这就是自动提交。其语法为:

SQL>SET AUTOCOMMIT ON;

(3) 隐式提交
隐式提交的定义:
又名自动提交,即无需显示执行commit语句,session中的操作被自动提交到数据库的过程。
隐式提交的方式:
1、正常执行完DDL语句。包括create,alter,drop,truncate,rename。
2、正常执行完DCL语句。包括grant,revoke。
3、正常退出数据库管理软件,没有明确发出commit或者rollback。
隐式提交的注意事项:
1、执行DDL语句时,前面的DML操作也会被提交到数据库中,因为是在一个session里,那执行ddl语句的
时候前面的dml语句肯定也会“不可幸免”的被提交到库中。
2、即使DDL语句执行失败,前面的DML操作也会被提交到数据库中这就有点儿让人奇怪了,DDL都执行失
败了,怎么还会提交呢?这就需要探究一下隐式提交的本质了(下文有叙述)。
3、在前面1和2的基础上,为了避免隐式提交或者回滚,尽量保证一条或者几条DML操作完成后有显示的提交
或者回滚,防止后续执行的DCL或者DDL自动提交前期的DML操作。

隐式提交的本质:
一条DDL语句执行了两次commit
commit;
DDL statement;
commit;
第一个commit将当前session中未提交的事务隐式提交,以保证DDL语句失败时的回滚位置。
第二个commit将DDL操作提交

为什么需要隐式提交
为了保证事务的一致性。我们在执行DDL语句的时候,Oracle需要在它的系统表中进行元数据的记录操作(即:除了建表还会进行不少insert操作),如果它不隐式提交就无法保证一致性;从内部运行机制来看DDL语句和DML语句还是有很大区别的,DML会对每个语句的每条记录都做日志记录以便于回滚,而DDL往往没必要搞这么复杂,从功能和易用性上看隐式提交都是最好的选择。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值