spring事务传播机制与数据库事务隔离级别

事务传播行为类型说明

PROPAGATION_REQUIRED [ˌprɔpəˈgeɪʃən]传输

[rɪˈkwaɪəd]必须

如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。
PROPAGATION_SUPPORTS[səˈpɔ:t]支持支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY[ˈmændəˌtɔ:ri:, -ˌtəʊri:]受委托的使用当前的事务,如果当前没有事务,就跑出异常
PROPAGATION_REQUIRES_NEW新建事务,如果当前存在事务,把当前事务挂起
PROPAGATION_NOT_SUPPORTED以非事务方式执行操作,如果当前存在事务,把当前事务挂起。
PROPAGATION_NEVER以非事务方式执行,如果当前存在事务,则跑出异常
PROPAGATION_NESTED如果当前存在事务,则在嵌套事务内执行,如果当前没有事务,则执行PROPAGATION_REQUIRED类似的操作(jdbc3.0以后才有)

 

数据库并发操作存在的异常情况

1、更新丢失:并发事务没隔离,一个失败导致另外一个事务也失败。

2、脏读去:一个事务开始读取了某行数据但是另外一个事务已经更新了此数据但没有能够及时提交。

3、不可重复读:一个事务对同一行数据读取两次却得到不同的结果。例如读取途中令一个事务对该数据进行了修改。

4、两次更新问题:两个并发事务同时读取同一行数据,两个都进行修改提交,第一次写操作失效。

5、幻读:一次事务中,两次读取同一个表,结果集不一样。

 

SQL规范定义的四种事务隔离级别

1、未授权读取(Read Uncommitted):称未提交读。允许脏读但不允许更新丢失,如果一个事务已经开始写数据,则另外一个事务部允许同时进行写操作,但允许读。可通过排它锁实现。允许读取已经被其它用户修改但尚未提交确定的数据。

2、授权读取(Read Committed):也称提交读。允许不可重复读取但不允许脏读取。

3、可重复读(Repeatable Read):禁止不可重复读取和脏读取。

4、串行(Serializable):也称可串行读。提供严格的事务隔离级别,要求事务序列化执行,事务只能一个接一个的执行,不能并发执行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值