您的位置:首页 > 数据库 > Oracle

Oracle事务管理(之简单的部分)

2010-10-11 21:55 330 查看
事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transactionend transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

例如:在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。

事务是恢复和并发控制的基本单位。

事务应该具有4个属性:原子性、一致性、隔离性、持续性。这四个属性通常称为ACID特性

  原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。

  一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

  隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

  持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

上面的这部分内容呢,是我从百度上面找到的,说的很好,也很全面,在Oracle当中事务可是个非常重要的概念,在以后学习三大框架比如Hibernate和sping当中的事务管理机制也是从概念上和这个类似,所以对事务必须要有深入的理解。

1,事务提交

在Oracle当中有些事务呢,需要手动提交,有些事务会自动提交,提交非自动提交的事务是采用commit命令。

比如当执行对数据库对象一级的结构的操作的时候,系统会自动提交

Create, alter, drop, rename, revoke, grant, connect,disconnect;

在这里呢,DDL语句操作是无法通过回滚的方式撤销的

2,事务回滚

要取消事务当中的操作,可以采用事务回滚Rollback命令。

这里呢,一般如果在进行大量的DML语句的操作的时候,事务不会自动提交,所以有的时候为了防止数据丢失,最好在操作结束时候commit

当然为了撤销操作,可以通过设置保存点来回滚,下面以一个例子为证:

Insert Into fangfan_dept values (30,'计算机','wuhan');

Insert Into fangfan_dept values (40,'财务','hefei');

savepoint a;

select * from fangfan_dept;

select * from fangfan_dept;

delete from fangfan_dept where deptno=50;

select * from fangfan_dept;

使用Rollback将依次回滚到a和b所在的操作的位置。这里很简单不说明了

那么请注意要是在两个还原点任意一个地方加上这么一句

create table fang_test as select * from dept;

那么它还能回滚吗?

答案是否定的,这里如果自己试试的话,你将会有很多有趣的结论。

Insert Into fangfan_dept values (50,'保洁','长沙');

delete from fangfan_dept where deptno=30 ;

savepoint b;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: