hibernate事务处理

同时运行多个事务产生的问题:
1.第一类丢失更新:
撤销一个事务时,把其他已提交的数据覆盖
后发生的事务回滚覆盖前面提交成功的数据
2.脏读:
一个事务读到另一个事务未提交的数据
后发生的事务成功提交覆盖前面回滚的事务
3.虚读:
一个事务读到另一个事务已提交的新插入的数据
后一个事务在前后两次读取数据时由于前面事务进行了插入操作,是数据前后不一致
4.不可重复读:
一个事务读到另一个事务已提交的更新的数据
后一个事务在前后两次读取时由于前一个已提交的事务进行了更新,是数据前后不一致
5.第二类丢失更新:
一个事务覆盖另一个事务已提交的更新数据,不可重复读的特例
后发生的事务成功提交覆盖了前面成功提交的数据

第一类丢失更新,脏读,第二类丢失更新都是后发生的事务影响前面的事务

虚读和不可重复读:  后发生的数据被前面的事务影响

 

 

 通过设置隔离级别解决:

 

 

 

隔离级别 是否出现第一类丢失更新 是否出现脏读 是否出现虚读是否出现不可重复读 是否出现第二类丢失更新 
 serializable 否 否否 否 
 repeatable read 否是 否  否
 read commit否 否 是 
 read Uncommited 否是 是 

 

 

 

 

锁机制能解决各种并发问题,但是会影响并发性能,为了能让用户根据实际应用的需要,在

事务的隔离性和并发性之间做出合理权衡,数据库系统提供了四种事务隔离级别供用户选择:

8 Serializable:串行化  完全看不到其他事务的更新,串行等待

4 Repeatable Read:可重复读  事务可看到其他事务已提交的新插入记录,但是不能看到其他事务对已有记录的更新

2 Read Commited:读已提交数据  事务可看到其他事务已提交的新插入记录,还能看到其他事务已经提交的对已有

 记录的更新

1 Read  Uncommited: 读未提交数据  事务可看到其他事务没有提交的新插入记录,还能看到其他事务没有提交的对

 已有记录的更新

优先考虑隔离级别为Read Commited,能避免脏读,有较好的并发性能,可能会导致不可重复读、虚读和第二类丢

失更新,但是可以采用悲观锁或乐观锁来控制。

mysql查看数据库隔离级别:   select @@tx_isolation;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值