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

Oracle事务 和 Spring事务 区别

2013年12月03日 ⁄ 综合 ⁄ 共 2259字 ⁄ 字号 评论关闭

Oracle 事务的特征

    ACID,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持交易(Transaction)的数据库系统,必需要具有这四种特性,否则在交易过程(Transaction
processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求. 

1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。 2、一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。 3、隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
4、持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。

 事务处理介绍 

    事务是这样一种机制,它确保多个SQL语句被当作单个工作单元来处理。事务具有以下的作用: 

    * 一致性:同时进行的查询和更新彼此不会发生冲突,其他用户不会看到发生了变化但尚未提交的数据。 

    * 可恢复性:一旦系统故障,数据库会自动地完全恢复未完成的事务。 

 事务与一致性 

    事务是完整性的单位,一个事务的执行是把数据库从一个一致的状态转换成另一个一致的状态。因此,如果事务孤立执行时是正确的,但如果多个事务并发交错地执行,就可能相互干扰,造成数据库状态的不一致。在多用户环境中,数据库必须避免同时进行的查询和更新发生冲突。这一点是很重要的,如果正在被处理的数据能够在该处理正在运行时被另一用户的修改所改变,那么该处理结果是不明确的。 

    不加控制的并发存取会产生以下几种错误: 

    1 丢失修改(lost updates 

    当多个事务并发修改一个数据时,不加控制会得出错误的结果,一个修改会覆盖掉另一个修改。 

    2 读的不可重复性 

    当多个事务按某种时间顺序存取若干数据时,如果对并发存取不加控制,也会产生错误。 

    3 脏读(DIRDY DATA),读的不一致性 

    4 光标带来的当前值的混乱 

    事务在执行过程中它在某个表上的当前查找位置是由光标表示的。光标指向当前正处理的记录。当处理完该条记录后,则指向下一条记录。在多个事务并发执行时,某一事务的修改可能产生负作用,使与这些光标有关的事务出错。 

    5 未释放修改造成连锁退出 

    一个事务在进行修改操作的过程中可能会发生故障,这时需要将已做的修改回退(Rollback)。如果在已进行过或已发现错误尚未复原之前允许其它事务读已做过修改(脏读),则会导致连锁退出。 

    6 一事务在对一表更新时,另外的事务却修改或删除此表的定义。 

    数据库会为每个事务自动地设置适当级别的锁定。对于前面讲述的问题:脏读、未释放修改造成的连锁退出、一事务在对一表更新时另外的事务却修改或删除此表的定义,数据库都会自动解决。而另外的三个问题则需要在编程过程中人为地定义事务或加锁来解决。

 事务和恢复 

    数据库本身肩负着管理事务的责任。事务是最小的逻辑工作单元,在这个工作单元中,对数据库的所有更新工作,要么必须全部成功,要么必须全部失败(回退)。只要应用程序指定了某段程序为一个事务并做了相应的处理(提交或回退),数据库系统会自动维护事务本身的特性。 

 ORACLE数据库的事务定义 

    ORACLE事务从COMMITROLLBACK、连接到数据库或开始第一条可执行的SQL语句时开始,到一条COMMITROLLBACK语句或退出数据库时结束。如果在一个事务中包含DDL语句,则在DDL语句的前后都会隐含地执行COMMIT语句,从而开始或结束一个事务。 

    如果一个事务由于某些故障或者由于用户改变主意而必须在提交前取消它,则数据库被恢复到这些语句和过程执行之前的状态。 

    利用ROLLBACK语句可以在COMMIT命令前随时撤消或回退一个事务。可以回退整个事务,也可以会退部分事务,但是不能回退一个已经被提交的事务。回退部分事务的ROLLBACK命令为: 

    ROLLBACK to savepoint 存储点名 

    存储点是用户放入事务中的标记,用来表示一个可被回退的位置。存储点通过在事务中放入一个SAVEPOINT命令而被插入。该命令的语法是: 

    SAVEPOINT 存储点名 

    如果在ROLLBACK语句中没有给出存储点名,则整个事务被回退。


Spring的声明式事务不是说你声明的方法都加入同一个事务,而是每一个方法一个事务,原子性操作方法在该方法内部调用.一般事务简单的讲就是对数据库表的添加、删除、修改和查询操作。。。事务具有原子性 事务中包含的添加、删除、更新等操作要么全部做完 要么全部都不做,以保证数据库的一致性和正确性 举个例子说:银行账户,你首先查看还有1000元,然后你要取500元钱,在你取钱时取款机出问题,你没能取成500元钱,这时就会回滚,不会说因为这样你下次再查看的时候就只有500了
....还有,你在前台和取款机前同时去现,其操作只有其一能完成

(隔离性:事务往往是存在并发的。为了简化系统编写的难度,系统必须保证事务之间是相互隔离的,即在一个事务执行时,开发人员不需要关心是否并发。)

抱歉!评论已关闭.