什么是事务

事务简介
事务在逻辑上是一组操作,要么执行,要不都不执行。主要是针对数据库而言的,比如说 MySQL。
为了保证事务是正确可靠的,在数据库进行写入或者更新操作时,就必须得表现出 ACID 的 4 个重要特性:

原子性(Atomicity):一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性(Consistency):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
事务隔离(Isolation):数据库允许多个并发事务同时对其数据进行读写和修改,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
持久性(Durability):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。


其中,事务隔离又分为 4 种不同的级别,包括:

读未提交(Read uncommitted),最低的隔离级别,允许“脏读”(dirty reads),事务可以看到其他事务“尚未提交”的修改。如果另一个事务回滚,那么当前事务读到的数据就是脏数据。


读已提交(read committed),一个事务可能会遇到不可重复读(Non Repeatable Read)的问题。不可重复读是指,在一个事务内,多次读同一数据,在这个事务还没有结束时,如果另一个事务恰好修改了这个数据,那么,在第一个事务中,两次读取的数据就可能不一致。


可重复读(repeatable read),一个事务可能会遇到幻读(Phantom Read)的问题。幻读是指,在一个事务中,第一次查询某条记录,发现没有,但是,当试图更新这条不存在的记录时,竟然能成功,并且,再次读取同一条记录,它就神奇地出现了。


串行化(Serializable),最严格的隔离级别,所有事务按照次序依次执行,因此,脏读、不可重复读、幻读都不会出现。虽然 Serializable 隔离级别下的事务具有最高的安全性,但是,由于事务是串行执行,所以效率会大大下降,应用程序的性能会急剧降低。如果没有特别重要的情景,一般都不会使用 Serializable 隔离级别。

传播行为

传播行为是指方法之间的调用事务策略的问题,Spring 支持的事务传播行为如下。

 ●Propgaton MANDATORY:要求调用该方法的线程必须处于事务环境中,否则抛出异常。

. Propagation NESTED: 即使执行该方法的线程已处于事务环境中,也依然启动新的事务,方法在联套的事务里执行:即使执行该方法的线程并未处于事务环境中, 也启动新的事务,然后执行该方法,此时与Propagation REQUIRED相同。

●Propagation NEVER: 不允许调用该方法的线程处于事务环境中,如果调用该方法的线程处于事务中,则抛出异常。

●Propagation NOT SUPPORTED:如果调用该方法的线程处于事务环境中,则暂停当前事务,然后执行该方法。

●Propagation REQUIRED: 要求在事务环境中执行该方法,如果当前执行线程已处于事务环境中,则直接调用:如果当前执行线程不处于事务环境中,则启动新的事务后执行该方法。

●Propgation REQURES NEW;该方法要求在新的事务环境中执行,如果当前执行线程已处于事务环境中,则先哲停当前事务,启动新事务后执行该方法:如果当前调用线程不处于事务环境中,则启动新的事务后执行方法。

●Propgtion SUPORTS如果当前执行线程处于事务环境中,则使用当前事务,否则不使用事务。

上面种依银行为中,最常用的是Ppion REURED,也是Spring默认的他措 行为。它比校简单,即当前如果不存在事务,就启用事务:如果存在, 就沿用下来,

需要格外注意的是:事务能否生效,取决于数据库引擎是否支持事务,MySQL 的 InnoDB 引擎是支持事务的,但 MyISAM 就不支持
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值